Обработка строки перечисления EL - PullRequest
3 голосов
/ 27 октября 2010

У меня есть переменная, передаваемая моему представлению JSP из контроллера пружины, который отображается в enum.Он распечатывается в «ENUM_VALUE», не очень удобен для пользователя.

Каков наилучший способ преобразовать его в более читаемую форму, например «Значение Enum».чистое EL-решение, позволяющее избежать написания большего количества кода в контроллере для его анализа, но все комментарии приветствуются.

Ответы [ 4 ]

5 голосов
/ 27 октября 2010

Это значение исходит из метода Enum#name().Просто добавьте получатель в ваше перечисление, которое возвращает понятное имя.Например,

public String getFriendlyName() {
    return name().toLowerCase().replace("_", " ");
}

Вы можете использовать его в EL как ${bean.someEnum.friendlyName}.

1 голос
/ 27 октября 2010

Я бы добавил для каждого перечисления текст описания, когда вы их определяете. Как то так.

public enum MyEnum {

    ENUM_VALUE("your friendly enum value");

    private String description;

    //constructor
    private MyEnum(String description) {
        this.description = description;
    }

    //add a getter for description
}

ваш EL будет выглядеть как $ {yourenum.description}

0 голосов
/ 19 апреля 2016

Вы можете просто сделать что-то подобное в jsp:

<span>${myenum.toString()}</span>
0 голосов
/ 28 августа 2013

Как сказал 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, если хотите.

...