2012-04-19 5 views
9

스프링 콩을 JSF (Primefaces) 변환기에 삽입해야한다. EL 해결 프로그램을 사용하여 콩을 주입하려고했습니다. 그러나 콩은 null 변환기 안에 있습니다.스프링 빈을 JSF 변환기에 삽입하는 방법

내 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 리졸버 : 내 코드를 디버깅 할 때

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

에서, departmentService 속성이 null입니다. 같은 방식으로 관리되는 JSF 빈 내부의 스프링 빈에 액세스 할 수있다.

답변

20

JSF 2.3까지 변환기는 주입 대상이 아닙니다. 대신 변환기를 JSF 또는 Spring 관리 Bean으로 만드십시오. 아래의 예는 그것을 JSF 관리 빈 수 :

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

그리고 #{departmentConverter} 대신 DepartmentConverter로 사용합니다.

예.

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

또는

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

은 (당신이 @FacesConverter 주석을 사용하면 자신의 이미 불필요하지만, 그 옆) faces-config.xml에서 <converter>을 제거하는 것을 잊지 마십시오.

관련 문제