У меня есть перечисление, Constants
:
enum Constants {
ONE,TWO,THREE;
}
Как сравнить константы перечисления в тимелеафе.
Спасибо.
У меня есть перечисление, Constants
:
enum Constants {
ONE,TWO,THREE;
}
Как сравнить константы перечисления в тимелеафе.
Спасибо.
Чтобы сравнить с константой перечисления, используйте следующий код:
th:if="${day == T(my.package.MyEnum).MONDAY}"
Еще один способ:
th:if="${constant.name() == 'ONE'}"
Он короче, но делает сравнение со строковым представлением, может вызвать проблемы при рефакторинге.
@Nick ответ имеет небольшую синтаксическую ошибку, в которой отсутствует конечная скобка. Это должно быть
th:if="${day == T(my.package.MyEnum).MONDAY}"
th:if="${#strings.toString(someObject.constantEnumString) == 'ONE'}">
Попробуйте следующее:
th:if="${ day.toString() == 'MONDAY'}"
Если вы не хотите конвертировать свой Enum в строку в своем объекте, вы можете сделать это следующим образом:
th:if="${#strings.defaultString(someObject.myConstant, 'DEFAULT_VALUE') == 'ONE'}"
Я предпочитаю использовать обертку вокруг перечисления.
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()
, и писать полное квалифицированное имя непосредственно в шаблон. С помощью этого решения вы можете реорганизовать без проверки своих шаблонов.
Другим вариантом является использование имени метода() перечисления в коммутаторе. Примером может служить:
<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'}
, который выглядит очень странно.