在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对象?
谢谢。
答案 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>
希望这可以解决您的问题。 :)