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

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

У меня есть компонент 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 (имя 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>

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

первый selectOneMenu вернет Enum Object в «singleEnumObject», и это хорошо.

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

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

Спасибо.

Вы читали stackoverflow.com/questions/8229638/…?

Kukeltje 06.12.2018 11:55

Да, у меня нет проблем с возвратом объекта Enum, если значение, присвоенное SelectOneMenu, является «простой» переменной. Моя проблема возникает только тогда, когда значение является элементом массива.

Tim-Tac 06.12.2018 13:38

Возможный дубликат Как использовать значения перечисления в f: selectItem (s)

Jasper de Vries 06.12.2018 15:34
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
0
3
305
1

Ответы 1

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

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

Привет спасибо за ответ Я правильно получаю свои перечисления в моем SelectOneMenu, так что это не моя проблема. Дело в том, что если я установлю значение простой переменной, как вы, то все будет нормально. Если я установил значение для элемента массива типов EnumObject, это не сработает :(

Tim-Tac 06.12.2018 11:42

Разве это не то же самое, что указано в ссылке, опубликованной в комментарии под вопросом

Kukeltje 06.12.2018 14:15

Другие вопросы по теме