根据下面列出的堆栈溢出问题中所述的相同问题在托管 Bean 中具有Converter
实例后,我收到未找到对象的异常。
Expression Error: Named Object: ch.foo.EnitityConverter@f163464 not found
堆栈溢出问题:
- 托管属性未注入@FacesConverter
- 在转换器中注入托管 Bean
我的 xhtml 代码:
<h:selectManyCheckbox value="#{bean.selectedEmployees}">
<f:converter converterId="#{bean.entityConverter}" />
<f:selectItems value="#{bean.allEmployees}" var="e" itemLabel="#{e.name}" />
</h:selectManyCheckbox>
converterId
属性需要转换器 ID(转换器名称)。任何 EL 表达式值都计算为String
。您基本上将转换器实例的toString()
结果传递给它,即ch.foo.EnitityConverter@f163464
。此转换器 ID 又不会被识别为任何已注册的转换器。然而。。您不想传递转换器 ID,而只想引用整个转换器实例。
每当要引用整个具体实例时,converterId
属性都是错误的属性。请改用binding
属性或输入组件的converter
属性。
因此,所以
<h:selectManyCheckbox value="#{bean.selectedEmployees}">
<f:converter binding="#{bean.entityConverter}" />
<f:selectItems value="#{bean.allEmployees}" var="e" itemLabel="#{e.name}" />
</h:selectManyCheckbox>
或
<h:selectManyCheckbox value="#{bean.selectedEmployees}" converter="#{bean.entityConverter}">
<f:selectItems value="#{bean.allEmployees}" var="e" itemLabel="#{e.name}" />
</h:selectManyCheckbox>
它缺少converter
名称。你的名字可能像entityConverter
.默认为小册子名称。使用如下;
<f:converter converterId="#{entityConverter}" />