9

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

4

1 に答える 1

21

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>

<converter>fromを削除することを忘れないでください(注釈faces-config.xmlを使用した場合、それ自体はすでに不要でしたが、それはさておき)。@FacesConverter

于 2012-04-19T13:53:43.593 に答える