@Ejb不会注入转换器

时间:2013-11-16 10:31:32

标签: jsf ejb converter

我正在尝试编写自己的转换器

我想用@EJB将我的EJB注入我的转换器。 我的@EJB在其他我的ManagedBean中工作,但它在我的转换器中不起作用

@ManagedBean
@ViewScoped

public class ServerTypeConverter implements Converter {

@EJB
private ServerTypeFacade serverTypeFacade;


@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
    if (value == null || value.isEmpty()) {
        return null;
    } else {
        int id = Integer.parseInt(value);
        return serverTypeFacade.findById(id);
    }
}

@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
    if (value == null || value.equals("")) {
        return "";
    } else {
        Integer id = ((ServerType) value).getServer_type_id();
        return String.valueOf(id);
    }

}


}

ServerTypeFacade返回null。为什么?

这是我使用转换器的方式

<h:selectOneMenu value="#{serverMB.selectedServerType}">
                    <f:converter converterId="serverTypeConverter"/>
                    <f:selectItems value="#{serverMB.serverTypesList}" var="servertypes" itemLabel="#{servertypes.server_type_name}" />
                    <f:ajax listener="#{serverMB.changeServerType}"  render="dd" />


                </h:selectOneMenu>

1 个答案:

答案 0 :(得分:3)

仅当@EJB将其声明为托管bean并且@ManagedBean将其用作托管bean时,转换器中的#{serverTypeConverter}才有效。

但是,您通过converterId="serverTypeConverter"将转换器用作面转换器。显然你已经在课堂上@FacesConverter<converter> faces-config.xml宣布它为面部转换器。

这两种声明和使用转换器的方式是互斥的。为了使@EJB起作用,您应该将转换器用作托管bean:

<f:converter binding="#{serverTypeConverter}" />

另见: