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 potentially_complex_expression
deux fois. C'est pourquoi j'ai introduit la variable locale condition
. Je n'aime toujours pas utiliser à la fois th:if="${condition}
et th:unless="${condition}"
.
Une chose importante est que j'utilise deux balises HTML différentes: disons h2
et span
.
Pouvez-vous suggérer une meilleure façon d'y parvenir?
J'ai essayé ce code pour savoir si un client est connecté ou anonyme. J'ai utilisé les expressions conditionnelles
th:if
etth:unless
. Façon assez simple de le faire.la source
Je voudrais partager mon exemple lié à la sécurité en plus de Daniel Fernández.
Voici une expression complexe avec des objets utilitaires mixtes «authentification» et «autorisation» qui produit un résultat «vrai / faux» pour le code de modèle thymeleaf.
Les objets utilitaires «authentification» et «autorisation» proviennent de la bibliothèque springsecurity3 de thymeleaf extras . Lorsque l'objet 'authentication' n'est pas disponible OU autorisation.expression ('isAuthenticated ()') prend la valeur 'false', l'expression renvoie $ {false}, sinon $ {true}.
la source
Vous pouvez utiliser
Exemple:
Cela pourrait être utile pour les nouvelles personnes posant la même question.
la source
Une autre solution - vous pouvez utiliser une variable locale:
En savoir plus sur les variables locales:
http://www.thymeleaf.org/doc/tutorials/2.1/usingthymeleaf.html#local-variables
la source
th:each
où l'expression a:
au lieu de=
Dans un cas plus simple (lorsque les balises html sont identiques):
la source
Une autre solution consiste simplement à utiliser
not
pour obtenir la négation opposée:Comme expliqué dans la documentation , c'est la même chose que d'utiliser
th:unless
. Comme d'autres réponses l'ont expliqué:L'utilisation
not
fonctionne également, mais à mon humble avis, il est plus lisible à utiliserth:unless
au lieu de nier la condition avecnot
.la source
la source
entrez la description de l'image ici
la source
Utiliser
th:switch
commeif-else
Utiliser
th:switch
commeswitch
la source