2012-04-19 17 views
9

Spring BeanをJSF(Primefaces)コンバーターに挿入する必要があります。私はELリゾルバを使って豆を注入しようとしました。しかし、豆はコンバータ内にnullです。Spring beanを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 Bean内のSpring Beanにアクセスできます。

答えて

20

JSF 2.3までは、コンバーターは注入ターゲットではありません。代わりにコンバータをJSFまたはSpring管理Beanにします。以下の例は、JSF管理Beanます:

@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>を削除することを忘れないでください。

関連する問題