복붙노트

[SPRING] 스프링 빈을 JSF 변환기에 삽입하는 법 [duplicate]

SPRING

스프링 빈을 JSF 변환기에 삽입하는 법 [duplicate]

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

내 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 빈 내부의 Spring 빈에 액세스 할 수있다.

해결법

  1. ==============================

    1.JSF 2.3까지, 변환기는 주입 대상이 아닙니다. 대신 변환기를 JSF 또는 스프링 관리 Bean으로 설정하십시오. 아래 예제는 JSF 관리 빈을 만든다.

    JSF 2.3까지, 변환기는 주입 대상이 아닙니다. 대신 변환기를 JSF 또는 스프링 관리 Bean으로 설정하십시오. 아래 예제는 JSF 관리 빈을 만든다.

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

    그리고 DepartmentConverter 대신 # {departmentConverter}로 사용하십시오.

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

    또는

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

    faces-config.xml (@FacesConverter 주석을 사용한 경우 이미 불필요하지만 그 외에는)에서 를 제거하는 것을 잊지 마십시오.

  2. from https://stackoverflow.com/questions/10229396/how-to-inject-spring-bean-into-jsf-converter by cc-by-sa and MIT license