javax.faces.FacesException:表达式错误:命名对象:未找到myConverter

时间:2015-05-05 17:46:14

标签: jsf-2 primefaces

我相信我正确地连接了所有内容,但我的xhtml中仍然无法识别转换器,其中包含以下代码:

<p:selectOneMenu ... value="#{myBean.myObject}" converter="myConverter">
  ...
</p:selectOneMenu>

其中myConverter是我用于在Object - String对象上执行String - ObjectmyObject转换的转换器(下面是MyType类型的实例)。

以下是myConverter代码的相关部分:

@FacesConverter (value="myConverter", forClass = MyType.class)
public class MyConverter implements Converter {
  ...
}

尽管有上述配置,但我收到错误:

  

javax.faces.FacesException:表达式错误:命名对象:不是myConverter   结果

我提到了一个similar question(缺少上面的配置),它通过修改faces-config.xml来提示替代方案,但我认为上面的配置也应该运行良好?无论如何,我也尝试了xml方法 - 这是配置的相关部分:

<faces-config ...>
    <converter>
      <converter-id>myConverter</converter-id>
      <converter-class>myPackage.MyConverter</converter-class>
    </converter>
</faces-config>

配置有什么问题吗?我看到示例here正在做同样的事情!

编辑: 好的,stacktrace显示了一些更有用的信息:

javax.faces.FacesException: Expression Error: Named Object: myConverter                  not found.

我在转换器名称(转换器ID)后看到了无关的间距;我尝试修改它的值以在远程调试期间删除末尾的空格并找到我的转换器(之后我打了一个NPE,但我想我可以把它拿掉)!关于为什么这些空格被附加到我的转换器名称的末尾(或者是id)的任何明显的东西?

1 个答案:

答案 0 :(得分:-1)

好的,我能够找到导致在转换器ID结尾插入额外空格的原因。

以下是我之前的确切代码:

<p:selectOneMenu ... converter="myConverter"
  filter="true" filterMatchMode="contains" editable="false">

我改为:

<p:selectOneMenu ...
  converter="myConverter" filter="true" filterMatchMode="contains" editable="false">

注意新行中的converter属性!我不确定我是否遗漏了关于属性的格式/渲染规则的明显内容,但至少可以说这种行为似乎很尴尬!