Как лучше реализовать if-else выражение в Thymeleaf?
Каким способом лучше всего реализовать выражение if-else в Thymeleaf?
Мне хотелось бы добиться в Thymeleaf того же, что я делаю в нижеприведенном примере на JSTL.
Пример с использованием JSTL:
<c:choose>
<c:when test="${potentially_complex_expression}">
<h2>Hello!</h2>
</c:when>
<c:otherwise>
<span class="xxx">Something else</span>
</c:otherwise>
</c:choose>
Что мне на данный момент удалось сделать в Thymeleaf:
<div th:with="condition=${potentially_complex_expression}" th:remove="tag">
<h2 th:if="${condition}">Hello!</h2>
<span th:unless="${condition}" class="xxx">Something else</span>
</div>
НО я не хочу дважды вычислять potentially_complex_expression.
Поэтому мне приходится вводить локальную переменную condition.
И все равно мне не очень по душе обращаться постоянно к этому выражению в обоих случаях:
th:if="${condition}th:unless="${condition}".
Также стоит отметить, что я использую два разных тега HTML: H2 и SPAN - это важно!
Существует ли более корректный способ сделать тоже самое?
Ответы (1 шт):
В
Thymeleaf есть аналоги <c:choose> и <c:when>:
это атрибуты th:switch и th:case введенные в Thymeleaf 2.0.
Пример:
<div th:switch="${user.role}">
<p th:case="'admin'">Пользователь является администратором</p>
<p th:case="#{roles.manager}">Пользователь является менеджером</p>
<p th:case="*">Пользователь имеет какую-то другую роль</p>
</div>
Данная структура работает похоже аналогичному выражению switch в Java.
Выражение указанное в th:switch вычисляется и сравнивается с результатами вычислений внутри th:case
При этом атрибутом th:case="*" помечается случай, который долже выбираться по умолчанию(если никакой другой кейс не подходит).
Здесь можно чуть подробнее узнать об этом синтаксисе (или в туториалах Thymeleaf).
Ссылки:
- Описание синтаксиса
th:switchв changelog'e Thymeleaf
https://www.thymeleaf.org/whatsnew20.html#swit - Описание синтаксиса в туториалах Thymeleaf
https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#switch-statements