Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.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
Java jsf selectOneMenu转换器将项目列表作为值获取_Java_Jsf_Jsf 2 - Fatal编程技术网

Java jsf selectOneMenu转换器将项目列表作为值获取

Java jsf selectOneMenu转换器将项目列表作为值获取,java,jsf,jsf-2,Java,Jsf,Jsf 2,我有一个JSF2SELECT输入,带有一个绑定到selectentries的转换器。我的对象有一个id字段,该字段的长度应为值。调用我的转换器时,将使用整个选择项列表而不是SimpleEntityGroup来调用它,因此我可以只返回组的.getId 调试输出为: 转换为字符串 [SimpleEntityGroup[id=1,name=Group 1],SimpleEntityGroup[id=2,name=Group 2],SimpleEntityGroup[id=3,name=Group 3]

我有一个JSF2SELECT输入,带有一个绑定到selectentries的转换器。我的对象有一个id字段,该字段的长度应为值。调用我的转换器时,将使用整个选择项列表而不是SimpleEntityGroup来调用它,因此我可以只返回组的.getId

调试输出为:

转换为字符串

[SimpleEntityGroup[id=1,name=Group 1],SimpleEntityGroup[id=2,name=Group 2],SimpleEntityGroup[id=3,name=Group 3]]

我希望每次使用单个SimpleEntityGroup调用该方法3次,而不是同时将所有3次作为列表。该方法应该返回一个字符串,如果我返回1,那么select中的所有值都是一,因此我知道它正在正确的位置使用转换器。它为什么这样称呼它

<h:selectOneMenu value="#{simpleEntityBacking.simpleEntity.group}" converter="SimpleEntityGroupConverter">
    <f:selectItems value="#{simpleEntityBacking.groups}" var="c"
        itemLabel="#{c.name}" itemValue="#{c.id}" />
</h:selectOneMenu>

找到答案后,选择需要如下所示:

                <h:selectOneMenu value="#{simpleEntityBacking.simpleEntity.group}" converter="#{simpleEntityGroupConverter}">
                    <f:selectItems value="#{simpleEntityBacking.groups}" var="c"
                        itemLabel="#{c.name}" />
                </h:selectOneMenu>
类的JSF转换器注释不允许EJB注入,因此您必须将其注释为托管bean,并在select中执行value={}

/* (non-Javadoc)
     * @see javax.faces.convert.Converter#getAsObject(javax.faces.context.FacesContext, javax.faces.component.UIComponent, java.lang.String)
     */
    @Override
    public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
        return ed.getGroupById(new Long(arg2));
    }

    /* (non-Javadoc)
     * @see javax.faces.convert.Converter#getAsString(javax.faces.context.FacesContext, javax.faces.component.UIComponent, java.lang.Object)
     */
    @Override
    public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
        L.debug("Converting to String");
        L.debug(arg2);
        SimpleEntityGroup g = (SimpleEntityGroup) arg2;
        return g.getId().toString();
    }
                <h:selectOneMenu value="#{simpleEntityBacking.simpleEntity.group}" converter="#{simpleEntityGroupConverter}">
                    <f:selectItems value="#{simpleEntityBacking.groups}" var="c"
                        itemLabel="#{c.name}" />
                </h:selectOneMenu>
@ManagedBean
@ApplicationScoped
public class SimpleEntityGroupConverter implements Converter {
    private static final Logger L = Logger.getLogger(SimpleEntityGroupConverter.class);

    @EJB
    private SimpleEntityDao ed;