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



我在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>    

希望这能解决你的问题。:(

最新更新