【问题标题】:JSF How to bind enum to selectOneMenu as array element and return enum objectJSF如何将枚举绑定到selectOneMenu作为数组元素并返回枚举对象
【发布时间】:2019-05-07 23:02:31
【问题描述】:

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

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

如果我在 managedBean 中将 selectOneMenu 的值设置为我的 Enum 类型的简单变量,我知道代码运行良好,例如:

<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 一样得到我的 Enum 对象吗?

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

谢谢。

【问题讨论】:

标签: arrays enums jsf-2.2 selectonemenu


【解决方案1】:

在您的控制器类(CurrentBean)中添加一个带有 getter 和 setter 的 Enum 对象,并创建一个返回 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>    

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

【讨论】:

  • 您好,感谢您的回复。我在 SelectOneMenu 中正确检索了我的枚举,所以这不是我的问题。事实是,如果我像你一样将值设置为一个简单的变量,我工作得很好。如果我将值设置为 EnumObject 类型数组的元素,它不起作用:(
  • 这与问题下方评论中发布的链接中提到的不一样
猜你喜欢
  • 1970-01-01
  • 2016-09-15
  • 1970-01-01
  • 1970-01-01
  • 2016-07-03
  • 2011-11-18
  • 2011-08-04
  • 2012-08-19
  • 1970-01-01
相关资源
最近更新 更多