9

我需要将 Spring bean 注入 JSF(Primefaces)转换器。我尝试使用 EL 解析器注入 bean。但是,beannull在转换器内部。

我的 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 回答