Jsf 2 指定一个<;p:选择一个功能表>;java对象中的项
我在Jsf 2 指定一个<;p:选择一个功能表>;java对象中的项,jsf-2,primefaces,converter,managed-bean,selectonemenu,Jsf 2,Primefaces,Converter,Managed Bean,Selectonemenu,我在 托管bean中的java代码: public List<SelectItem> gouvernorats() { List<Gouvernorat> all = emetteursEJB.findAllGouvernorat(); List<SelectItem> items = new ArrayList<>(); for (Gouvernorat g : all) { items.add(new Se
托管bean中的java代码:
public List<SelectItem> gouvernorats() {
List<Gouvernorat> all = emetteursEJB.findAllGouvernorat();
List<SelectItem> items = new ArrayList<>();
for (Gouvernorat g : all) {
items.add(new SelectItem(g, g.getLibelleGouv()));
}
return items;
}
我找到了一个解决方案,在EJB中注入了
InitilContext.lookup()
如果没有
@facescoverter(forClass=Gouvernorat.class)
,这个特定的构造将无法工作,而不会导致转换错误(因此永远不会命中ajax侦听器方法),因此您必须拥有一个转换器。显然,它在getAsObject()
中返回了null
。如果您不知道如何修复它,请在问题中显示它。@BalusC如何修复,public Object getAsObject(FacesContext context,UIComponent component,String value){//我在这里如何修复}只需编辑您的问题以显示您当前拥有的转换器代码。然后我们可以指出错误。对于您问题中迄今为止显示的代码(假设它显然已经存在于表单中),在没有转换器的情况下不可能调用ajax侦听器,但是您确认它已被调用,因此您必须已经有了转换器。因此,只需编辑问题并复制粘贴转换器的代码即可。坦白地说@BalusC相信我,我的代码中没有转换器,我也没有使用它。那么,显然输入组件没有放在表单组件中。但这是一个太明显的错误。
<p:selectOneMenu value="#{emetteurBean.selectedGouvernorat}" style="width:160px" >
<f:selectItem itemLabel="Select One" itemValue="" />
<f:selectItems value="#{emetteurBean.gouvernorats()}" />
<p:ajax event="change" listener="#{emetteursBean.handelGouvChanged()"/>
</p:selectOneMenu>
@FacesConverter(forClass = Gouvernorat.class)
public class EmetteursConverter implements Converter {
@EJB
private ReferentielDaoLocal refEJB;
@Override
public Object getAsObject(FacesContext context, UIComponent component, String selectedValue) {
System.out.println("Inside The Converter");
System.out.println(selectedValue.length());
if (selectedValue == null) {
return null;
} else {
return refEJB.findGouvByCode(selectedValue.trim());
}
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
if (value == null) {
return null;
} else {
return String.valueOf(((Gouvernorat) value).getIdGouvernorat());
}
}
}
@FacesConverter(forClass = Gouvernorat.class)
public class GouvernoratConverter implements Converter {
private static final Logger LOG = Logger.getLogger(GouvernoratConverter.class.getName());
@Override
public Object getAsObject(FacesContext context, UIComponent component, String selectedValue) {
if (selectedValue == null) {
return null;
} else {
try {
ReferentielDaoLocal myService = (ReferentielDaoLocal) new
InitialContext().lookup("java:global/ErpCCF/ErpCCF-ejb/ReferentielDaoImpl");
return myService.findGouvByCode(selectedValue);
} catch (NamingException ex) {
LOG.log(Level.SEVERE, "Converter Gouvernorat Error", ex.getMessage());
return null;
}
}
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
if (value == null) {
return null;
} else {
return String.valueOf(((Gouvernorat) value).getIdGouvernorat());
}
}
}