JSF Как связать enum с selectOneMenu в качестве элемента массива и вернуть объект enum - PullRequest
0 голосов
/ 06 декабря 2018

У меня проблема с одним из моих SelectOneMenu в JSF.

У меня есть компонент SelectOneMenu, связанный со списком Enums, и значение, данное для 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 (имя Enum как String, а не сам объект).

Я знаю, что код работает хорошо, если я устанавливаю значение selectOneMenu впростая переменная типа Enum Type в моем managedBean, например:

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

Таким образом, в моем понимании все перечисления являются хорошими, а не источником проблемы.

Как я могу получить перечисление объекта вэлемент массива?

Спасибо за вашу помощь!

РЕДАКТИРОВАТЬ после дублирования предложения:

Говоря, у нас есть две переменные bean, такие как;

private EnumType singleEnumObject;
private List<EnumType> listEnumObjects;

и у нас есть два selectOneMenu в JSf-подобном (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>

Как вы можете видеть, они практически одинаковы, только второесвязанный с массивом элементов в качестве значения.Но у каждого из них есть Enums в selectItems и та же самая обработка.

first selectOneMenu вернет Enum Object в "singleEnumObject", что хорошо.

второй selectOneMenu вернет String в "listEnumObjects [0]" (перечислите имя в виде строки).Разве я не должен получить свой объект Enum, как первый SelectOneMenu?

Кто-нибудь имеет представление о том, что я здесь делаю неправильно?Может кто-нибудь предоставить мне пример, где он получает Enum Object, используя элемент массива в значении SelectOneMenu (а не в одной переменной)?

Спасибо.

1 Ответ

0 голосов
/ 06 декабря 2018

в вашем классе контроллера (CurrentBean) добавьте объект Enum с помощью getter & setter и создайте метод 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>    

Надеюсь, что это решит вашу проблему.:)

...