web-dev-qa-db-fra.com

Instruction de commutateur Thymeleaf avec plusieurs cas

En bref

Je veux avoir une instruction switch dans thymeleaf avec la logique une fois écrite dans plusieurs instructions case.

En détail

Je veux implémenter cela dans la feuille de thym

switch(status.value){
  case 'COMPLETE':
  case 'INVALID':
     //print exam is not active
     break;
  case 'NEW':
     //print exam is new and active
     break;
}

Mon code thymleaf actuel qui échoue avec une erreur d'exécution

 <div th:switch="${status.value}">
      <div th:case="'COMPLETE','INVALID'">
         <!-- print object is not active -->
      </div>
      <div th:case="NEW'">
         <!-- print object is new and active -->
      </div>
 </div>                             

Mais le code ci-dessus échoue avec une erreur

org.thymeleaf.exceptions.TemplateProcessingException: Could not parse as expression: "'COMPLETE','INVALID'"...

Remarque: je connais la raison de ce message d'erreur ci-dessus. Tout ce dont j'ai besoin est de savoir comment implémenter un commutateur avec plusieurs cas pour une seule sortie

15
Faraj Farook

L'échec est dû au fait que vous n'avez pas d'expression valide dans le premier cas. Plus précisément,

'COMPLETE','INVALID'

n'est pas une expression valide. Je soupçonne que ce que vous essayez de faire est d'inclure le div si le statut est COMPLET ou INVALIDE. Malheureusement, je pense que vous devrez dupliquer le balisage pour ces conditions individuellement. Permettez-moi de suggérer le balisage suivant:

<!-- th:block rather than unneeded div -->
<th:block th:switch="${status.value}">
    <div th:case="'COMPLETE'">
        <!-- print object is not active -->
    </div>
    <div th:case="'INVALID'">
        <!-- print object is not active -->
    </div>
    <div th:case="'NEW'">
        <!-- print object is new and active -->
    </div>
</th:block>

Vous pouvez également recourir à th: if qui pourrait réellement mieux fonctionner dans ce cas:

<div th:if="${status.value} eq 'COMPLETE' or ${status.value} eq 'INVALID'">
    <!-- print object is not active -->
</div>
<div th:if="${status.value} eq 'NEW'">
    <!-- print object is new and active -->
</div>

Ou encore plus simplement:

<div th:unless="${status.value} eq 'NEW'">
    <!-- print object is not active -->
</div>
<div th:if="${status.value} eq 'NEW'">
    <!-- print object is new and active -->
</div>
32
pens-fan-69