表达式错误: 命名对象: 找不到ch.foo.EnitityConverter@f163464



根据下面列出的堆栈溢出问题中所述的相同问题在托管 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}" />

最新更新