Je sais comment créer un attribut conditionnel dans une balise sur jstl:
<body <c:if test="${userCreated}"> onload="somejavascriptfunction()"</c:if> >
Mais comment puis-je le faire en utilisant thymeleaf?
IndexController
@RequestMapping("/register")
public String register(UserEntity user, @RequestParam String repeatedPassword, RedirectAttributes redirectAttributes) {
user.setAdmin(false);
userFacade.create(user);
redirectAttributes.addFlashAttribute(Constants.USER_CREATED, true);
logger.info("Usuario criado");
return "redirect:/login";
}
Jusqu'ici la seule solution que j'ai trouvée était de le faire comme ça
<script type="text/javascript" th:if="${userCreated}">
$(document).ready(function() {
somejavascriptfunction()
});
</script>
Mais cela ne semble pas être la meilleure façon de le faire. Alors, comment puis-je faire une déclaration if pour un attribut sur thymeleaf?
C'est vraiment un peu contre-intuitif, si vous envisagez d'ajouter une classe conditionnelle, vous utilisez le format suivant:
<div th:classappend="${userSlug != null}?has-slug">
Afin d'ajouter un attribut conditionnel, vous placez la condition sur la valeur de l'attribut, comme suit:
<div th:attrappend="data-path=${userSlug != null}?@{/myaccount/__${userSlug}__}">
Si userSlug a la valeur null, l'instruction précédente sera évaluée comme suit:
<div>
Si userSlug est pas null, l'instruction est évaluée à:
<div data-path="/myaccount/my-slug">
Avez-vous essayé de créer l'attribut onload en utilisant le processeur th: attr ? Je sais que plusieurs processeurs ne rendront pas l'attribut si le résultat est null . Je ne sais pas si cela s'applique au processeur d'attr
<body th:attr="onload=${doOnload ? 'somejs()' : null}">
</body>
Je n'ai pas de code de test disponible ici, mais cela pourrait fonctionner. Vous pouvez également retourner un attribut onload vide.
Sinon, je ne vois pas de problème avec votre deuxième approche utilisant une balise de script conditionnelle. Je le fais assez souvent dans mes composants.
la réponse de Yorgos devrait être la réponse acceptée. J'ai fait la même chose avec disabled
<div th:each="f, t : ${user1.folders}">
<input th:attrappend="disabled=${user2.folders[__${t.index}__].closed?'disabled'}" />
</div>
PS: Je n'ai pas assez de réputation pour écrire un commentaire à la place.
La syntaxe correcte est la suivante:
th:attr="attributeName=${condition}? 'conditionIsTrue' : 'conditionIsFalse'"