Как сделать если-нибудь в Thymeleaf?
каков лучший способ сделать простой if-else в Thymeleaf?
Я хочу добиться в Thymeleaf такого же эффекта, как
<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>
в JSTL.
что я понял:
<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}".
важно то, что я использую 2 разных HTML-тегов: скажем h2 и span.
можете ли вы предложить лучший способ его достижения?
8 ответов:
Thymeleaf имеет эквивалент
<c:choose>и<c:when>: theth:switchиth:caseатрибуты, введенные в Thymeleaf 2.0.они работают, как и следовало ожидать, используя
*по умолчанию:<div th:switch="${user.role}"> <p th:case="'admin'">User is an administrator</p> <p th:case="#{roles.manager}">User is a manager</p> <p th:case="*">User is some other thing</p> </div>см.http://www.thymeleaf.org/whatsnew20.html#swit для быстрого объяснения синтаксиса (или учебники thymeleaf).
отказ от ответственности, как того требуют правила StackOverflow: я автор thymeleaf.
я попробовал этот код, чтобы узнать, если клиент вошел в систему или анонимно. Я сделал с помощью
th:ifиth:unlessусловные выражения. Довольно простой способ сделать это.<!-- IF CUSTOMER IS ANONYMOUS --> <div th:if="${customer.anonymous}"> <div>Welcome, Guest</div> </div> <!-- ELSE --> <div th:unless="${customer.anonymous}"> <div th:text=" 'Hi,' + ${customer.name}">Hi, User</div> </div>
Я хотел бы поделиться своим примером, связанным с безопасностью в дополнение к Даниэлю Фернандесу.
<div th:switch="${#authentication}? ${#authorization.expression('isAuthenticated()')} : ${false}"> <span th:case="${false}">User is not logged in</span> <span th:case="${true}">Logged in user</span> <span th:case="*">Should never happen, but who knows...</span> </div>вот сложное выражение со смешанными объектами утилиты "аутентификация" и "авторизация", которое дает результат "true/false" для кода шаблона thymeleaf.
служебные объекты "аутентификация" и "авторизация" пришли из thymeleaf extras springsecurity3 библиотека. Когда объект "аутентификация" недоступен или разрешение.выражение ('isAuthenticated ()') вычисляется как' false', выражение возвращает ${false}, в противном случае ${true}.
можно использовать
If-then-else: (if) ? (then) : (else)пример:
'User is of type ' + (${user.isAdmin()} ? 'Administrator' : (${user.type} ?: 'Unknown'))Это может быть полезно для новых людей задают тот же вопрос.
в более простом случае (когда теги html одинаковы):
<h2 th:text="${potentially_complex_expression} ? 'Hello' : 'Something else'">/h2>
другое решение - вы можете использовать локальную переменную:
<div th:with="expr_result = ${potentially_complex_expression}"> <div th:if="${expr_result}"> <h2>Hello!</h2> </div> <div th:unless="${expr_result}"> <span class="xxx">Something else</span> </div> </div>подробнее о местных variables:
http://www.thymeleaf.org/doc/tutorials/2.1/usingthymeleaf.html#local-variables
другое решение-просто используя
notчтобы получить противоположное отрицание:<h2 th:if="${potentially_complex_expression}">Hello!</h2> <span class="xxx" th:if="${not potentially_complex_expression}">Something else</span>как поясняется в документация, это то же самое, что использовать
th:unless. Как объяснили другие ответы:и
th:ifимеет обратный атрибут,th:unless, которые мы могли бы используется в предыдущем примере вместо использования не внутри OGNL выражениеиспользуя
notтоже работает, но ИМХО это является более читаемым для использованияth:unlessвместо отрицания условия сnot.
<div th:switch="${user.role}"> <p th:case="'admin'">User is an administrator</p> <p th:case="#{roles.manager}">User is a manager</p> <p th:case="*">User is some other thing</p> </div> <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>
Comments