Как сказал Kacper86, спецификация 2.1 гласит, что приведение Enum-to-String должно вызывать .name()
вместо toString()
. Мне не удалось получить ответ BalusC на работу.
Лично я предпочитаю использовать функцию EL вместо привязки метода getDescription
к моему перечислению. Я обнаружил, что обычно всегда переопределяю метод toString()
, поэтому добавление другого метода для получения того же значения кажется плохим дизайном. Если я работаю на Java, я просто звоню toString()
, поэтому моя проблема исключительно в области EL. Кроме того, функция EL делает это так, что вам не нужно изменять свой enum-класс каждый раз, когда вы хотите распечатать новый enum на вашей веб-странице; Вы просто повторно используете свою функцию EL для любого перечисления.
Вот простой код для создания функции EL:
public final class JSTLUtilityFunctions
{
public static String enumToStr(Enum<?> enumInst) {
return enumInst.toString();
}
}
В вашем ДВУ:
<taglib>
<!-- Other stuff... -->
<function>
<name>enumToStr</name>
<function-class>yourpackage.JSTLUtilityFunctions</function-class>
<function-signature>java.lang.String enumToStr(java.lang.Enum)</function-signature>
</function>
</taglib>
Использование:
<%@taglib prefix="util" uri="your-TLD-uri.tld" %>
<span>${ util:enumToStr(myEnumInstance) }</span>
Очевидно, что вы можете изменить сигнатуру метода, чтобы принимать любой экземпляр Object
, если хотите.