javax.faces.FacesException:Expression Error:对象名为:未找到entityConverter

时间:2013-11-15 13:38:30

标签: jsf converter

好吧,我有一个像bellow一样的自定义面部转换器:

@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)
    ...

我不知道为什么会这样。

1 个答案:

答案 0 :(得分:2)

此,

@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"没有找到任何转换器。