【问题标题】:javax.faces.FacesException: Expression Error: Named Object: myConverter not foundjavax.faces.FacesException:表达式错误:命名对象:找不到 myConverter
【发布时间】:2015-05-05 17:46:14
【问题描述】:

我相信我的接线正确,但转换器仍然无法在我的xhtml 中被识别,我有以下代码:

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

其中myConverter 是我用来对myObject 对象(下面的MyType 类型的实例)执行Object - StringString - Object 转换的转换器。

这是myConverter 代码的相关部分:

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

尽管进行了上述配置,但我得到了错误:

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

我提到了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)的末尾?

【问题讨论】:

    标签: jsf-2 primefaces


    【解决方案1】:

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

    这是我之前的确切代码:

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

    我改成了:

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

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

    【讨论】:

    • 我真的怀疑这就是原因。可能是您部署了一个“旧”文件,并且通过更改它,您触发了一种重新部署,激活了一个新文件(或实际部署了转换器或其他东西)。你试过改回来吗?那么它仍然失败吗?
    • 这是不可能的。您的构建很可能是脏的,或者 IDE 管理的 hotpublish/hotdeploy 失败。如果在运行时似乎缺少某些东西,即使背后的代码存在,请始终执行完全清理、重建、重新部署和重新启动,以排除脏构建的原因。
    猜你喜欢
    • 2016-09-28
    • 1970-01-01
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-23
    相关资源
    最近更新 更多