¿Cuál es la mejor manera de hacer un simple if
- else
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 imaginado 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. Por eso introduje la variable local condition
. Aún así no me gusta usar ambos th:if="${condition}
y th:unless="${condition}"
.
Una cosa importante es que uso dos etiquetas HTML diferentes: digamos h2
y span
.
¿Puedes sugerir una mejor manera de lograrlo?
Intenté este código para averiguar si un cliente ha iniciado sesión o es anónimo. Lo hice usando las expresiones condicionales
th:if
yth:unless
. Una forma bastante simple de hacerlo.fuente
Me gustaría compartir mi ejemplo relacionado con la seguridad además de Daniel Fernández.
Aquí hay una expresión compleja con objetos de utilidad mixtos de 'autenticación' y 'autorización' que producen un resultado 'verdadero / falso' para el código de plantilla de hoja de tomillo.
Los objetos de utilidad 'autenticación' y 'autorización' provienen de la biblioteca springsecurity3 de thymeleaf extras . Cuando el objeto 'autenticación' no está disponible O autorización.expression ('isAuthenticated ()') se evalúa como 'falso', la expresión devuelve $ {false}, de lo contrario $ {true}.
fuente
Puedes usar
Ejemplo:
Podría ser útil para las personas nuevas que hacen la misma pregunta.
fuente
Otra solución: puede usar la variable local:
Más sobre variables locales:
http://www.thymeleaf.org/doc/tutorials/2.1/usingthymeleaf.html#local-variables
fuente
th:each
donde tiene la expresión en:
lugar de=
En un caso más simple (cuando las etiquetas html son iguales):
fuente
Otra solución es simplemente usar
not
para obtener la negación opuesta:Como se explica en la documentación , es lo mismo que usar
th:unless
. Como han explicado otras respuestas:El uso
not
también funciona, pero en mi humilde opinión, es más fácil de usar enth:unless
lugar de negar la condiciónnot
.fuente
fuente
ingrese la descripción de la imagen aquí
fuente
Usar
th:switch
como unif-else
Usar
th:switch
comoswitch
fuente