Qual é a melhor maneira de fazer um simples if
- else
no Thymeleaf?
Quero alcançar no Thymeleaf o mesmo efeito 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>
em JSTL.
O que eu descobri até agora:
<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>
Não quero avaliar potentially_complex_expression
duas vezes. Por isso, introduzi a variável local condition
. Ainda não gosto de usar ambos th:if="${condition}
e th:unless="${condition}"
.
Uma coisa importante é que eu uso duas tags HTML diferentes: digamos h2
e span
.
Você pode sugerir uma maneira melhor de conseguir isso?
Eu tentei esse código para descobrir se um cliente está logado ou anônimo. Eu fiz usando as expressões
th:if
eth:unless
condicionais. Uma maneira bem simples de fazer isso.fonte
Gostaria de compartilhar meu exemplo relacionado à segurança, além de Daniel Fernández.
Aqui está uma expressão complexa com objetos utilitários 'autenticação' e 'autorização' misturados, que produzem resultados 'verdadeiro / falso' para o código do modelo da folha timelapse.
Os objetos utilitários 'authentication' e ' permission ' vieram da biblioteca thymeleaf extras springsecurity3 . Quando o objeto 'authentication' não está disponível, OU authentication.expression ('isAuthenticated ()') é avaliado como 'false', a expressão retorna $ {false}, caso contrário, $ {true}.
fonte
Você pode usar
Exemplo:
Pode ser útil para as novas pessoas que fazem a mesma pergunta.
fonte
Outra solução - você pode usar a variável local:
Mais sobre variáveis locais:
http://www.thymeleaf.org/doc/tutorials/2.1/usingthymeleaf.html#local-variables
fonte
th:each
onde a expressão tem, em:
vez de=
Em um caso mais simples (quando as tags html são iguais):
fonte
Outra solução é usar apenas
not
para obter a negação oposta:Conforme explicado na documentação , é a mesma coisa que usar
th:unless
. Como outras respostas explicaram:Usar
not
também funciona, mas IMHO é mais legível de usar emth:unless
vez de negar a condiçãonot
.fonte
fonte
insira a descrição da imagem aqui
fonte
Use
th:switch
comoif-else
Use
th:switch
comoswitch
fonte