Передача значения перечисления в качестве атрибута тега в JSP - PullRequest
10 голосов
/ 22 ноября 2011

У меня есть пользовательский тег JSP, использующий параметр enum. Этот подход является следствием использования других классов, которые нуждаются в этом перечислении. Дело в том, что я понятия не имею, как назначить значение перечисления в EL:

<mytaglib:mytag enumParam="${now what do I type here?}" />

Единственный обходной путь, который я нашел до сих пор, заключался в том, чтобы сделать enumParam целым числом и преобразовать его в нужные значения:

<mytaglib:mytag enumParam="3" />

Я считаю, что должен быть лучший способ сделать это. Пожалуйста, помогите.

Ответы [ 2 ]

12 голосов
/ 22 ноября 2011

EL позволяет использовать Enums!

Существует три способа установки значения атрибута тега с использованием выражения rvalue или lvalue:
[..]

Только с текстом:

Это выражение называется буквальным выражением.В этом случае значение String атрибута приводится к ожидаемому типу атрибута.Выражения литеральных значений имеют специальные правила синтаксиса.Посмотрите Литеральные Выражения для получения дополнительной информации.Когда атрибут тега имеет тип enum, выражение, которое использует атрибут, должно быть буквальным выражением.Например, атрибут tag может использовать выражение «hearts» для обозначения Suit.hearts.Литерал приводится к Suit, а атрибут получает значение Suit.hearts.

http://download.oracle.com/javaee/5/tutorial/doc/bnahq.html

Enum:

public Enum Color{ 
   RED, BLUE, GREEN 
}

JSP / файл тегов

<mytaglib:mytag enumParam="${'RED'}" />

Протестировано с Tomcat 7.0.22, а также с Jetty 6.1.26.

0 голосов
/ 22 ноября 2011

EL не поддерживает доступ к Enums.Вы должны рассмотреть возможность использования строк.

Пример:

public Enum Color{ 
   READ, BLUE, GREEN 
}

Вы можете передать строку в свой пользовательский тег, как показано ниже:

<mytaglib:mytag enumParam="RED" />
OR
<mytaglib:mytag enumParam="${obj.color}" />

В своем пользовательском теге вы получитеПеречислите следующее значение:

Color.valueOf("RED");
...