Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf @Ejb不';t注入转换器_Jsf_Ejb_Converter - Fatal编程技术网

Jsf @Ejb不';t注入转换器

Jsf @Ejb不';t注入转换器,jsf,ejb,converter,Jsf,Ejb,Converter,我正在尝试编写自己的转换器 @ManagedBean @ViewScoped public class ServerTypeConverter implements Converter { @EJB private ServerTypeFacade serverTypeFacade; @Override public Object getAsObject(FacesContext context, UIComponent component, String value) { if

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

@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);
    }

}


}
<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>
我想用@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);
    }

}


}
<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>
ServerTypeFacade返回null。为什么?

下面是我使用转换器的方法

@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);
    }

}


}
<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>

转换器中的
@EJB
仅当您通过
@ManagedBean
将其声明为托管bean,并通过
{serverTypeConverter}
将其用作托管bean时才起作用

但是,您正通过
converterId=“serverTypeConverter”
将转换器用作面转换器。显然,您还通过类上的
@facescoverter
faces config.xml
中的
将其声明为faces转换器

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

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

另见:

您是如何使用转换器的?但是当我想使用像#{serverTypeConverter}这样的转换器时,我会遇到以下错误:javax.servlet.ServletException:表达式错误:命名对象:com.mb。ServerTypeConverter@3c37114f没有找到。