略して
Thymeleafに、一度複数のcaseステートメントに書き込まれたロジックを含むswitchステートメントが欲しいです。
詳細
これを胸腺に実装したい
switch(status.value){
case 'COMPLETE':
case 'INVALID':
//print exam is not active
break;
case 'NEW':
//print exam is new and active
break;
}
ランタイムエラーで失敗する現在のthymleafコード
<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>
しかし、上記のコードはエラーで失敗します
org.thymeleaf.exceptions.TemplateProcessingException: Could not parse as expression: "'COMPLETE','INVALID'"...
注:この上記のエラーメッセージの理由はわかっています。必要なのは、単一の出力に対して複数のケースを持つスイッチを実装する方法を知ることだけです
失敗の原因は、最初のケースでは有効な式がないためです。具体的には
'COMPLETE','INVALID'
は有効な式ではありません。あなたがしようとしていることは、ステータスがCOMPLETEまたはINVALIDの場合、divを含めることだと思います。残念ながら、これらの条件のマークアップを個別に複製する必要があると思います。次のマークアップを提案させてください。
<!-- 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>
あるいは、この場合は実際にうまくいく可能性があるth:ifに頼ることもできます。
<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>
またはさらに簡単に:
<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>