Как сделать если-нибудь в 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.



можете ли вы предложить лучший способ его достижения?

976   8  

8 ответов:

Thymeleaf имеет эквивалент <c:choose> и <c:when>: the th: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

    Ничего не найдено.