JSF如何将枚举绑定到selectOneMenu作为数组元素并返回枚举对象

时间:2018-12-06 09:27:13

标签: arrays enums jsf-2.2 selectonemenu

在JSF中我的一个SelectOneMenu出现问题。

我有一个绑定了Enums列表的SelectOneMenu组件,并且为selectOneMenu提供的值是这样的数组元素:

<h:selectOneMenu id="menuOperatorOne" value="#{operandExpression.operators[0]}">
                 <f:selectItem itemValue="#{null}" itemLabel=" -- Select "></f:selectItem>
                 <f:selectItems value="#{currentBean.listComparaisonOperators}"/>
                  <f:ajax render="expressionForm"/>
 </h:selectOneMenu>

问题是仅返回一个字符串(枚举的名称为String,而不是对象本身)。

如果将selectOneMenu的值设置为我的ManagedBean中枚举类型的简单变量,我知道代码会很好用:

<h:selectOneMenu id="menuOperatorOne" value="#{currentBean.myEnumObject}">

因此,按照我的意思,我的列举都很好,而不是问题的根源。

如何检索数组元素中的对象枚举?

感谢您的帮助!

重复命题后进行

编辑:

说我们有两个bean变量,如;

private EnumType singleEnumObject;
private List<EnumType> listEnumObjects;

,我们在JSf中有两个selectOneMenu之类的(listComparaisonOperators包含我的Enum值);

<h:selectOneMenu id="menuOperatorOne" value="#{currentBean.singleEnumObject}">
     <f:selectItems value="#{currentBean.listComparaisonOperators}"/>
 </h:selectOneMenu>
 <h:selectOneMenu id="menuOperatorTwo" value="#{currentBean.listEnumObjects[0]}">
     <f:selectItems value="#{currentBean.listComparaisonOperators}"/>
</h:selectOneMenu>

如您所见,它们几乎相同,只是第二个作为值链接到元素数组。但是它们每个在selectItems中都有Enums,并且具有相同的处理方式。

第一个selectOneMenu 会在“ singleEnumObject”中返回 Enum Object

第二个selectOneMenu 将在“ listEnumObjects [0]”(枚举名称为字符串)中返回 String 。我不应该像第一个SelectOneMenu一样得到枚举对象吗?

有人知道我在这里做错了什么吗?有人可以举个例子吗,他使用SelectOneMenu值(而不是单个变量)中的数组元素来检索Enum对象?

谢谢。

1 个答案:

答案 0 :(得分:0)

在您的控制器类(CurrentBean)中,使用getter和setter添加一个Enum对象,并创建一个get方法,该方法将返回Enum对象。像这样

private EnumObject enumObject;

// generate getter and setter for enumObject

public EnumObject[] getMyEnums {
  return EnumObject.values();
}

在查看页面中,使用以下

<h:selectOneMenu id="menuOperatorOne" value="#{operandExpression.enumObject}">
             <f:selectItems value="#{currentBean.myEnums}"/>
</h:selectOneMenu>    

希望这可以解决您的问题。 :)