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