我正在尝试编写自己的转换器
我想用@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>
答案 0 :(得分:3)
仅当@EJB
将其声明为托管bean并且@ManagedBean
将其用作托管bean时,转换器中的#{serverTypeConverter}
才有效。
但是,您通过converterId="serverTypeConverter"
将转换器用作面转换器。显然你已经在课堂上@FacesConverter
或<converter>
faces-config.xml
宣布它为面部转换器。
这两种声明和使用转换器的方式是互斥的。为了使@EJB
起作用,您应该将转换器用作托管bean:
<f:converter binding="#{serverTypeConverter}" />