【问题标题】:Expression Error: Named Object: ch.foo.EnitityConverter@f163464 not found表达式错误:命名对象:未找到 ch.foo.EnitityConverter@f163464
【发布时间】:2012-11-16 10:46:10
【问题描述】:

根据下面列出的stackoverflow 问题中描述的相同问题,在托管 Bean 中有一个Converter 的实例后,我收到一个异常,即找不到该对象。

Expression Error: Named Object: ch.foo.EnitityConverter@f163464 not found

Stackoverflow 问题:

我的 xhtml 代码:

<h:selectManyCheckbox value="#{bean.selectedEmployees}">
  <f:converter converterId="#{bean.entityConverter}" />
  <f:selectItems value="#{bean.allEmployees}" var="e" itemLabel="#{e.name}" />    
</h:selectManyCheckbox>

【问题讨论】:

    标签: jsf jsf-2 converter


    【解决方案1】:

    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>
    

    【讨论】:

      【解决方案2】:

      缺少converter 名称。你的名字可能是entityConverter。默认为课程名称。如下使用;

         <f:converter converterId="#{entityConverter}" />
      

      【讨论】:

      • 我不使用faces-config.xml 来命名转换器。我在托管 bean 中引用转换器实例。请参阅链接的 stackoverflow 问题。不过,谢谢你的回答。 ;)
      • 即使你使用注解,转换器也有一个名称。
      • 您在此处将所有转换器本身作为其 ID 传递。我不认为这是正确的。
      猜你喜欢
      • 2016-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-13
      • 1970-01-01
      • 2012-06-13
      • 1970-01-01
      相关资源
      最近更新 更多