Передача значения enum в качестве атрибута тега в JSP

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

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

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

<mytaglib:mytag enumParam="3" />

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

Ответ 1

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

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

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

< some: tag value = "sometext" / >

Это выражение называется буквальным выражением. В этом случае атрибут String value привязан к ожидаемому типу атрибутов. Буквенные выражения имеют специальные правила синтаксиса. См. Literal Expressions для получения дополнительной информации. Когда атрибут тега имеет тип перечисления, выражение, которое использует атрибут, должно быть буквальным выражением. Например, атрибут тега может использовать выражение "сердца" для обозначения "Костюм". Литерал принуждается к 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.

Ответ 2

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

Пример:

public Enum Color{ 
   READ, BLUE, GREEN 
}

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

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

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

Color.valueOf("RED");