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

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

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

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

<mytaglib:mytag enumParam="3" />

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

2 ответа

Решение

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.

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

Пример:

public Enum Color{ 
   READ, BLUE, GREEN 
}

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

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

В вашем пользовательском теге вы получаете значение перечисления, как это:

Color.valueOf("RED");
Другие вопросы по тегам