2012-04-19 21 views
9

Necesito inyectar Spring beans en un convertidor JSF (Primefaces). Intenté inyectar frijoles usando EL resolver. Sin embargo, los granos son null dentro de los convertidores.Cómo inyectar Spring Bean en el convertidor JSF

Mi convertidor de JSF:

public class DepartmentConverter implements Converter { 
    private DepartmentService departmentService; 
    //getter setter for this property 

    @Override 
    public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) { 
     //codes 
    } 

    @Override 
    public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) { 
     //Codes 
    } 
} 

faces-config.xml:

<converter> 
    <converter-id>DepartmentConverter</converter-id> 
    <converter-class>com.studinfo.jsf.converter.DepartmentConverter</converter-class> 
    <property> 
     <property-name>departmentService</property-name> 
     <property-class>com.studinfo.services.DepartmentService</property-class> 
     <default-value>#{DepartmentService}</default-value> 
    </property> 
</converter> 

EL resolución:

<application> 
    <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver> 
</application> 

Cuando puedo depurar mi código, la propiedad es departmentServicenull. Puedo acceder a los beans de Spring dentro de un bean JSF administrado de la misma manera.

Respuesta

20

Hasta JSF 2.3, los convertidores no son objetivos de inyección. Haga que el convertidor sea un frijol administrado por JSF o Spring. El siguiente ejemplo hace que sea un bean gestionado JSF:

@ManagedBean 
@RequestScoped 
public class DepartmentConverter implements Converter { 
    // ... 
} 

y lo utilizan como lugar de #{departmentConverter}DepartmentConverter.

E.g.

<h:inputSome ... converter="#{departmentConverter}" /> 

o

<h:someComponent> 
    <f:converter binding="#{departmentConverter}" /> 
</h:someComponent> 

No se olvide de quitar el <converter> de faces-config.xml (que estaba en su propia ya innecesaria si se ha utilizado la anotación @FacesConverter, pero aparte de eso).

Cuestiones relacionadas