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}" />
另见: