2013-11-15 4 views
2

Ну, у меня есть обычай стоит нейтрализатор как ниже:javax.faces.FacesException: Expression Ошибка: Объект с именем: entityConverter не нашел

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

у меня нет я деа, почему это происходит.

ответ

2

Это

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

не является действительным. Вы должны использовать тот или иной. Об этом не сообщалось, как issue 1650 и вскоре фиксированы, но быстро вернулась со следующим комментарием:

The following text was added to the Javadocs of FacesConverter in JSF 2.2:

The preceding text contains an important subtlety which application users should understand. It is not possible to use a single @FacesConverter annotation to register a single Converter implementation both in the by-class and the by-converter-id data structures. One way to achieve this result is to put the actual converter logic in an abstract base class, without a @FacesConverter annotation, and derive two sub-classes, each with a @FacesConverter annotation. One sub-class has a value attribute but no forClass attribute, and the other sub-class has the converse.

In this light I will close this issue as Invalid.

Ваша конкретная задача эффективно вызвана тем, что forClass фактически используется, но value нет. Таким образом, converter="entityConverter" не нашел конвертера.

+1

Это очень странно, потому что у меня точно такой же класс в другом проекте, и все работает нормально. – Shelly

+0

Эффекты могут зависеть от используемого JSF impl/версии. – BalusC

+0

Я использую jsf-api и jsf-impl 2.16 в обоих проектах, pom.xml точно такой же. – Shelly

Смежные вопросы