“空转换器”的转换错误设置值-为什么我需要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()把我弄糊涂了。做这件事的有效方法是什么?具有字符串值时,如何获得关联的实体对象?应该根据字符串值从服务对象查询实体对象并返回该实体吗?或者也许我可以访问组成选择项的实体的列表,循环它们以找到正确的实体,并返回该实体?这样做的正常方式是什么?
添加回答
举报
0/150
提交
取消