Подтвердить что ты не робот

Сравнение констант перечисления в тимелеафе

У меня есть перечисление, Constants:

enum Constants {
    ONE,TWO,THREE;
}

Как сравнить константы перечисления в тимелеафе.

Спасибо.

4b9b3361

Ответ 1

Чтобы сравнить с константой перечисления, используйте следующий код:

th:if="${day == T(my.package.MyEnum).MONDAY}"

Ответ 2

Еще один способ:

th:if="${constant.name() == 'ONE'}"

Он короче, но делает сравнение со строковым представлением, может вызвать проблемы при рефакторинге.

Ответ 3

@Nick ответ имеет небольшую синтаксическую ошибку, в которой отсутствует конечная скобка. Это должно быть

th:if="${day == T(my.package.MyEnum).MONDAY}"

Ответ 4

th:if="${#strings.toString(someObject.constantEnumString) == 'ONE'}">

Ответ 5

Попробуйте следующее:

th:if="${ day.toString() == 'MONDAY'}"

Ответ 6

Если вы не хотите конвертировать свой Enum в строку в своем объекте, вы можете сделать это следующим образом:

th:if="${#strings.defaultString(someObject.myConstant, 'DEFAULT_VALUE') == 'ONE'}"

Ответ 7

Я предпочитаю использовать обертку вокруг перечисления.

public class ConstantsWrapper {
    public static final instance = new ConstantsWrapper();
    public Constants getONE() { return Constants.ONE }
    public Constants getTWO() { return Constants.TWO }
    public Constants getTHREE() { return Constants.THREE }
} 

Следующий шаг - добавление нового экземпляра Wrapper в модели

models.add("constantsWrapper", ConstantsWrapper.instance);

Теперь у вас есть тип безопасного доступа в шаблоне тимелеафа к каждому значению Constants.

th:if="${value == constantsWrapper.getONE()}"

Я знаю, что этим решениям необходимо написать больше исходного кода и создать один экземпляр. Преимущество более безопасно, чем вызов T(), и писать полное квалифицированное имя непосредственно в шаблон. С помощью этого решения вы можете реорганизовать без проверки своих шаблонов.

Ответ 8

Другим вариантом является использование имени метода() перечисления в коммутаторе. Примером может служить:

  <th:block th:switch="${imageType.name()}>
     <span th:case="'ONE'"></span>
     <span th:case="'TWO'"></span>
     <span th:case="'THREE'"></span>
  </th:block>

Он похож на Java Switch swith ENUM вместо других ответов, таких как ${day == T(my.package.MyEnum).MONDAY} или ${#strings.toString(someObject.constantEnumString) == 'ONE'}, который выглядит очень странно.