我在JSF中的一个SelectOneMenu有问题。
我有一个与枚举列表绑定的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(枚举的名称为String,而不是对象本身(。
如果我在managedBean中将selectOneMenu的值设置为Enum Type的简单变量,我知道代码工作得很好:
<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中都有枚举,并且有相同的处理方式。
第一次选择OneMenu会在"singleEnumObject"中返回Enum Object,这很好。
第二次选择OneMenu将返回"listEnumObjects[0]"中的String(枚举名称为字符串(。我不应该像第一个SelectOneMenu一样得到我的枚举对象吗?
有人知道我在这里做错了什么吗?有人能给我举个例子吗?他使用SelectOneMenu值中的数组元素(而不是单个变量(检索枚举对象?
谢谢。
在控制器类(CurrentBean(中添加一个带有getter&setter,并创建一个将返回Enum对象的get方法。类似于
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>
希望这能解决你的问题。:(