Quelle est la meilleure façon de faire un simple if-else dans Thymeleaf ?
Je veux obtenir dans Thymeleaf le même effet que
<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>
dans JSTL.
Ce que j'ai compris jusqu'à présent:
<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>
Je ne veux pas évaluer deux fois potentiellement_expression_complexe
. C'est pourquoi j'ai introduit la variable locale condition
.
Pourtant, je n'aime pas utiliser à la fois th:if="${condition}
et th:unless="${condition}"
.
Ce qui est important, c'est que j'utilise deux balises html différentes : disons h2
et span
.
Pouvez-vous me suggérer une meilleure façon d'y parvenir ?
Thymeleaf possède un équivalent à <c:choose>
et <c:when>
: les attributs th:switch
et th:case
introduits dans Thymeleaf 2.0.
Ils fonctionnent comme prévu, en utilisant *
pour le cas par défaut:
<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>
Voir http://www.thymeleaf.org/whatsnew20.html#swit pour une explication rapide de la syntaxe (ou les tutoriels de thymeleaf).
Avertissement, conformément aux règles de StackOverflow : Je suis l'auteur de thymeleaf.
J'ai essayé ce code pour savoir si un client est connecté ou anonyme. J'ai utilisé les expressions conditionnelles th:if
et th:unless
. Une façon assez simple de le faire.
<!-- 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>
J'aimerais partager mon exemple lié à la sécurité avec Daniel Fernández.
<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>
Voici une expression complexe avec des objets utilitaires mixtes 'authentification' ; et 'autorisation' ; qui produit un résultat 'vrai/faux' ; pour le code du modèle thymeleaf.
Les objets utilitaires d'authentification et d'autorisation proviennent de la bibliothèque thymeleaf extras springsecurity3. Lorsque l'objet 'authentification' ; n'est pas disponible OU que authorization.expression('isAuthenticated()' ;) est évalué à 'false' ;, l'expression renvoie ${false}, sinon ${true}.