else java jsp if-statement jstl thymeleaf

java - thymeleaf if else



¿Cómo hacer if-else en Thymeleaf? (8)

¿Cuál es la mejor manera de hacer un if-else simple en Thymeleaf?

Quiero lograr en Thymeleaf el mismo efecto 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>

en JSTL.

Lo que he calculado hasta ahora:

<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>

No quiero evaluar potentially_complex_expression dos veces. Es por eso que introduje la condition variable local.

Aún así, no me gusta usar th:if="${condition} y th:unless="${condition}" .

Lo importante es que utilizo 2 etiquetas html diferentes: digamos h2 y span .

¿Puedes sugerir una mejor manera de lograrlo?


En caso más simple (cuando las etiquetas html son las mismas):

<h2 th:text="${potentially_complex_expression} ? ''Hello'' : ''Something else''">/h2>


Intenté este código para averiguar si un cliente está conectado o es anónimo. Lo hice usando th:if y th:unless expresiones condicionales. Una manera bastante simple de hacerlo.

<!-- 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>


Me gustaría compartir mi ejemplo relacionado con la seguridad además de 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>

Aquí está la expresión compleja con objetos de utilidad mixtos de ''autenticación'' y ''autorización'' que produce el resultado ''verdadero / falso'' para el código de plantilla de hoja de tomillo.

Los objetos de utilidad ''autenticación'' y ''autorización'' provienen de thymeleaf extras springsecurity3 library . Cuando el objeto ''autenticación'' no está disponible O authorization.expression (''isAuthenticated ()'' se evalúa como ''falso'', la expresión devuelve $ {false}, de lo contrario $ {true}.


Otra solución es simplemente usar not para obtener la negación opuesta:

<h2 th:if="${potentially_complex_expression}">Hello!</h2> <span class="xxx" th:if="${not potentially_complex_expression}">Something else</span>

Como se explica en la documentation , es lo mismo que usar th:unless . Como otras respuestas han explicado:

Además, th:if tiene un atributo inverso, th:unless , que podríamos haber usado en el ejemplo anterior en lugar de usar a no dentro de la expresión OGNL

Usar not funciona también, pero en mi humilde opinión, es más fácil usar th:unless lugar de negar la condición not th:unless .



Puedes usar

If-then-else: (if) ? (then) : (else)

Ejemplo:

''User is of type '' + (${user.isAdmin()} ? ''Administrator'' : (${user.type} ?: ''Unknown''))

Podría ser útil para las personas nuevas que hacen la misma pregunta.


Thymeleaf tiene un equivalente a <c:choose> y <c:when> : los atributos th:switch y th:case introducidos en Thymeleaf 2.0.

Funcionan como era de esperar, utilizando * para el caso predeterminado:

<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>

Consulte http://www.thymeleaf.org/whatsnew20.html#swit para obtener una explicación rápida de la sintaxis (o los tutoriales de thymeleaf).

Descargo de responsabilidad, según lo exigen las reglas de : soy el autor de thymeleaf.


<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>