ミルラク

Thymeleafで条件属性th:if, th:switch, 三項演算子を使用する

更新日: 2024-02-27

当サイトはアフィリエイト広告を利用しています。

Thymeleafを書籍で学びたい方やThymeleafと一緒にSpringも習得したい方におすすめな書籍です。
Springについての書籍ですが、Thymeleafの基本構文や他システムとの連携など30ページほど取り上げられています。
ThymeleafとSpringは親和性の高い技術なので、これを機にSpringを学んでみるのはいかがでしょうか?

実行環境

実行環境がない方は、こちらの記事を参考にしてください。

項目バージョン
OSmacOS Catalina
JDKOracle JDK@8
Thymeleaf3.1

Thymeleafで条件属性th:if, th:switch, 三項演算子を使用する

th:if

th:if = "${条件式}" で条件分岐を実装することができます。
条件式がtrueと判断された場合、タグおよび内部のタグが実行されます。

使用可能な演算子

項目演算子
比較演算子><>=<= (gtltgele)
等価演算子==!= (eqne)
論理否定演算子!not
二項演算子andor

真偽値

<th:block th:if="${isReady}">
  <!-- isReadyがtrueの場合の処理 -->
</th:block>

<th:block th:if="${!isReady}">
  <!-- isReadyがfalseの場合 -->
</th:block>

文字列

<th:block th:if="${name == 'apple'}">
  <!--nameが'apple'の場合の処理 -->
</th:block>

数値

<th:block th:if="${count lt 3}">
  <!-- countが3未満の場合の処理 -->
</th:block>

ユーティリティオブジェクト

条件式にユーティリティオブジェクトを使用することができます。
ユーティリティオブジェクトについてはこちらの記事を参考にしてください。

<th:block th:if="${#lists.isEmpty(results)}">
  <!-- resultsが空の場合の処理 -->
</th:block>

複数条件

条件式に複数の条件を使用することができます。

<th:block th:if="${!#lists.isEmpty(results) and #strings.isEmpty(errorMessage) or #lists.isEmpty(results)}">
  <!-- resultsが空でない かつ errorMessageが空 または resultsが空の場合の処理 -->
</th:block>

th:switch

th:switchth:case を使用して2つ以上の条件分岐を実装することができます。
th:case がtrueと判断された場合、タグが実行されます。
th:case=*th:case の条件のいずれにも当てはまらなかった際に評価されます。

<!-- priorityが1の場合'LOW', 2の場合'MIDDLE', 3の場合'HIGH', 1~3以外の場合'UNKNOWN'を表示 -->
<th:block th:switch="${priority}">
  <span th:case=1 th:text="LOW"></span>
  <span th:case=2 th:text="MIDDLE"></span>
  <span th:case=3 th:text="HIGH"></span>
  <span th:case=* th:text="UNKNOWN"></span>
</th:block>

三項演算子

"${条件式}? trueの場合の処理 : falseの場合の処理 で三項演算子を実装することができます。
falseの場合の処理は省略可能です。

<!-- isReadyがtrueの場合'OK', falseの場合'NG'を表示 -->
<span th:text="${isReady}? 'OK' : 'NG'"></span>

<!-- isReadyがtrueの場合'Hello'を表示 -->
<span th:text="${isReady}? 'Hello'"></span>

if / elseを実装する

残念ながら、Thymeleafにはif / elseにあたる構文はありません。ここでは、代替方法を2つ紹介します。

  • th:unless を使用する
  • th:switch を使用する

th:unless

th:unless は条件式を満たさない場合にtrueと判断されます。
つまり、th:unlessth:if と同じ条件式を記述することでelseと同じ動きをすることになります。

<th:block th:if="${isReady}">
  <!-- isReadyがtrueの場合の処理 -->
</th:block>
<th:block th:unless="${isReady}">
  <!-- isReadyがfalseの場合の処理 -->
</th:block>

th:switch

実装方法に少し癖がありますが、th:switch を使用して実装することができます。

<th:block th:switch="${isReady}">
  <th:block th:case=true>
    <!-- isReadyがtrueの場合の処理 -->
  </th:block>
  <th:block th:case=*>
    <!-- isReadyがfalseの場合の処理 -->
  </th:block>
</th:block>

お疲れさまでした

Thymeleafで条件属性th:if, th:switch, 三項演算子を使用する方法とif / elseの実装方法を紹介しました。
少しでも参考になれば幸いです。