2012-01-16 22 views
5

Ho un convertitore personalizzato per selezionare un Paese in un componente SelectOneMenu:JSF 2.0 Converter non funziona dal vaso-file separato

File: address.jar

@FacesConverter(value="CountryConverter", forClass=Country.class) 
public class CountryConverter implements Converter { 

private CountryBean countryBean = CountryBean.getCountryService(); 

@Override 
public Object getAsObject(FacesContext context, UIComponent component, String value) { 
    return countryBean.find(value); 
} 

@Override 
public String getAsString(FacesContext context, UIComponent component, Object value) { 
    if (value != null) 
     return ((Country)value).getcc_fips(); 
    else 
     return null; 
}  

E questo è il xhtml testo:

File: radice Progetto

<h:selectOneMenu id="country" value="#{cc.attrs.addrEntity.country}"> 
    <f:selectItem itemLabel="Please select one..." 
      noSelectionOption="true" /> 
    <f:selectItems value="#{cc.attrs.addrBean.countries}" 
        var="model" 
        itemLabel="#{model.name}" 
        itemValue="#{model}" 
        noSelectionValue="&#8220;no selection&#8221;"/> 
    <f:converter ConverterId="CountryConverter"/>   
</h:selectOneMenu> 

ho il convertitore in un file "address.jar" e quando cerco di aprire la pagina di scrivere l'indirizzo, allora risponde dicendo "Espressione Errore: oggetto con nome MyCustomCoverter non trovato.". Anche quando copio il convertitore nel progetto in cui sono presenti i file xhtml, funziona anche bene. Cosa posso fare per risolvere questo?

Perché non funziona da un file jar separato?

Grazie.

risposta

15

È necessario fornire un file compatibile con JSF 2.0 /META-INF/faces-config.xml nel file JAR per consentire a JSF di eseguire automaticamente la scansione del file JAR per le classi con annotazioni JSF.

<?xml version="1.0" encoding="UTF-8"?> 
<faces-config 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd" 
    version="2.0"> 
</faces-config> 

Senza quel file, JSF non si auto-scansione del file JAR di salvare le prestazioni e quindi la vostra @FacesConverter non verrà trovato né registrati.

+0

Perfetto, funziona molto bene. Grazie!. –

+0

Prego. – BalusC

+1

Un ulteriore ma importante dettaglio è che il JAR deve trovarsi nella ** lib-directory ** di WAR (web-application). Se si ha un EAR con un WAR in esso e il JAR con il convertitore è solo nell'EAR ma non nella lib di WAR, JSF non troverà il convertitore. Vedi anche [questa risposta] (http://stackoverflow.com/questions/2987266/why-doesnt-jsf-2-0-ri-mojarra-scan-my-class-annotations) per un'altra descrizione dettagliata del problema. –