为了账号安全,请及时绑定邮箱和手机立即绑定

“空转换器”的转换错误设置值-为什么我需要JSF中的转换器?

“空转换器”的转换错误设置值-为什么我需要JSF中的转换器?

“空转换器”的转换错误设置值-为什么我需要JSF中的转换器?我在理解如何在JSF 2中有效地使用POJO/Entity时遇到了问题。例如,我试图选择一个Warehouse实体通过以下下拉列表:<h:selectOneMenu value="#{bean.selectedWarehouse}">     <f:selectItem itemLabel="Choose one .." itemValue="#{null}" />     <f:selectItems value="#{bean.availableWarehouses}" /></h:selectOneMenu>以及下面的托管bean:@Named@ViewScopedpublic class Bean {     private Warehouse selectedWarehouse;     private List<SelectItem> availableWarehouses;     // ...     @PostConstruct     public void init() {         // ...         availableWarehouses = new ArrayList<>();         for (Warehouse warehouse : warehouseService.listAll()) {             availableWarehouses.add(new SelectItem(warehouse, warehouse.getName()));         }     }     // ...}注意我用了整个Warehouse的价值SelectItem.当我提交表单时,以下Faces消息失败:转换错误设置值‘com.example.Warehouse@caebabe’空转换器‘。我希望JSF能设置正确的Warehouse对象打包到托管bean中。SelectItem..将我的实体包装在SelectItem应该跳过创建Converter为了我的实体。我真的需要用Converter每当我想使用<h:selectOneMenu>?对于JSF来说,只需从可用项列表中提取所选的项就可以了。如果我真的要用转换器,实际的方法是什么?到目前为止,我想到的是:创建一个Converter实体的实施。覆盖getAsString()..我想我不需要这个,因为SelectItem将用于显示下拉选项标签。覆盖getAsObject()..我认为这将用于返回正确的SelectItem或实体,取决于在托管bean中定义的选定字段的类型。这个getAsObject()把我弄糊涂了。做这件事的有效方法是什么?具有字符串值时,如何获得关联的实体对象?应该根据字符串值从服务对象查询实体对象并返回该实体吗?或者也许我可以访问组成选择项的实体的列表,循环它们以找到正确的实体,并返回该实体?这样做的正常方式是什么?
查看完整描述

2 回答

  • 2 回答
  • 0 关注
  • 603 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信