web-dev-qa-db-ja.com

複数のケースがあるThymeleafのswitchステートメント

略して

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'"...

注:この上記のエラーメッセージの理由はわかっています。必要なのは、単一の出力に対して複数のケースを持つスイッチを実装する方法を知ることだけです

15
Faraj Farook

失敗の原因は、最初のケースでは有効な式がないためです。具体的には

'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>
32
pens-fan-69