2012-01-16 20 views
5

Tengo un convertidor de medida para seleccionar un país en un componente SelectOneMenu:JSF 2.0 Converter no trabaja desde separada fichero-jar

del archivo: 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; 
}  

Y este es el XHTML texto:

del archivo: raíz Proyecto

<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> 

Tengo el convertidor en un archivo "address.jar" y cuando intento abrir la página para escribir la dirección, responde "Expression Error: Objeto con el nombre MyCustomCoverter no encontrado".. Incluso cuando copie el convertidor al proyecto donde están los archivos xhtml, entonces funciona bien. ¿Qué puedo hacer para resolver esto?

¿Por qué no funciona desde un archivo jar separado?

Gracias.

Respuesta

15

Debe proporcionar un archivo compatible con JSF 2.0 /META-INF/faces-config.xml en el archivo JAR para que JSF escanee automáticamente el archivo JAR para las clases con anotaciones 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> 

Sin ese archivo, JSF no se auto-explorar el archivo JAR para salvar el rendimiento y por lo tanto su no se encontrará @FacesConverter ni registrarse.

+0

Perfecto, funciona muy bien. ¡Gracias!. –

+0

De nada. – BalusC

+1

Un detalle adicional pero importante es que el JAR debe estar en ** lib-directory ** de WAR (aplicación web). Si tiene un EAR con un WAR y el JAR con el convertidor está solo en el EAR pero no en el lib de WAR, JSF no encontrará el convertidor. Ver también [esta respuesta] (http://stackoverflow.com/questions/2987266/why-doesnt-jsf-2-0-ri-mojarra-scan- my-class-annotations) para otra descripción detallada del problema. –