【问题标题】:javax.faces.FacesException: Expression Error: Object named: entityConverter not foundjavax.faces.FacesException:表达式错误:对象命名:未找到 entityConverter
【发布时间】:2013-11-15 13:38:30
【问题描述】:

嗯,我有一个自定义面孔转换器,如下所示:

@FacesConverter(value = "entityConverter", forClass = AbstractBean.class)
public class EntityConverter implements Converter {

在我的 XHTML 的某些部分,我是这样使用的:

<p:selectOneMenu converter="entityConverter"
                rendered="#{clienteMB.bean.pessoaFisica != null}"
                value="#{clienteMB.bean.pessoaFisica.estadoCivil.descricao}"
                effect="fade">
                <f:selectItem itemLabel="Selecione um Sexo" itemValue="" />
                <f:selectItems value="#{clienteMB.estadosCivis}" var="estadoCivil"
                    itemLabel="#{estadoCivil.descricao}" itemValue="#{estadoCivil}" />
            </p:selectOneMenu>

但是当我尝试进入这个页面时,我得到了以下错误:

javax.faces.FacesException: Expression Error: Object named: entityConverter not found.
    at com.sun.faces.application.ApplicationImpl.createConverter(ApplicationImpl.java:1338)
    at com.sun.faces.facelets.tag.jsf.ValueHolderRule$LiteralConverterMetadata.applyMetadata(ValueHolderRule.java:85)
    at com.sun.faces.facelets.tag.MetadataImpl.applyMetadata(MetadataImpl.java:81)
    at javax.faces.view.facelets.MetaTagHandler.setAttributes(MetaTagHandler.java:129)
    at javax.faces.view.facelets.DelegatingMetaTagHandler.setAttributes(DelegatingMetaTagHandler.java:102)
    at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.doNewComponentActions(ComponentTagHandlerDelegateImpl.java:409)
    at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:159)
    at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)
    at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:98)
    at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137)
    ...

我不知道为什么会这样。

【问题讨论】:

    标签: jsf converter


    【解决方案1】:

    这个,

    @FacesConverter(value = "entityConverter", forClass = AbstractBean.class)
    

    无效。您应该选择使用其中一个。这曾被报告为issue 1650 并很快得到修复,但很快就回复了以下评论:

    在 JSF 2.2 的 FacesConverter 的 Javadocs 中添加了以下文本:

    前面的文字包含应用程序用户应该理解的重要细节。不可能使用单个 @FacesConverter 注释在 by-class 和 by-converter-id 数据结构中注册单个 Converter 实现。实现此结果的一种方法是将实际的转换器逻辑放在一个抽象基类中,没有@FacesConverter 注释,并派生两个子类,每个子类都有一个@FacesConverter 注释。一个子类有 value 属性但没有 forClass 属性,另一个子类有相反的属性。

    鉴于此,我将把这个问题作为无效关闭。

    您的具体问题实际上是因为 forClass 正在被使用,但 value 不是。因此,converter="entityConverter" 没有找到任何转换器。

    【讨论】:

    • 这很奇怪,因为我在另一个项目中有完全相同的类并且一切正常。
    • 效果可能取决于使用的 JSF impl/version。
    • 我在两个项目中都使用了 jsf-api 和 jsf-impl 2.16,pom.xml 完全一样。
    • 好吧,我不知道是什么问题,但是我将所有 pom.xml 从我的另一个项目复制到了这个项目,一切正常。无论如何谢谢@BalusC
    • 有些事情真的很糟糕。我有类似的问题 - 即使我只使用这个注释,也找不到转换器。 @FacesConverter("cisDateConverter")。仅当它在 faces-config.xml 中声明时才有效。据报道,还有另一个类加载问题——我们的耳朵里面有很多战争,只有其中一些使用 JSF。但是 JSF 会报告类加载问题,即使是那些没有 JSF (AS Payara) 的人也是如此。
    猜你喜欢
    • 2016-09-28
    • 1970-01-01
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    • 1970-01-01
    相关资源
    最近更新 更多