ホーム>技術

Thymeleafで制御文th:if/th:switch-th:caseを使用する方法

目次

効率的なJava学習サービスの探し方をご存知ですか?

Javaを学習したいけれどどの学習サービスを選べば良いか分からないという悩みを抱えていませんか?
Javaは市場価値が高い為、学習サービスを提供しているものも多く、条件に合うものを見つけるのに苦労しますよね。
以下の記事ではJavaを入門レベルから勉強できるおすすめ学習サービスをご紹介しています。
Spring FrameworkやThymeleafがカリキュラムに含まれているものがあるので、ぜひ参考にしてください!

Javaを入門レベルから勉強できるおすすめ学習サービス7選

実行環境

OSmacOS Catalina 10.15.1
EclipsePhoton 2018-09
Java8
Spring Tool Suit3.9.6
Spring Boot2.1.13
Thymeleaf2.1.2

開発および実行環境がない人は、以下の記事を参考に構築してください。

Spring BootとThymeleafを導入してHello worldを表示する方法

Thymeleafで制御文th:if/th:switch-th:caseを使用する方法

今回は、Thymeleafで制御文を使用する方法として以下の2つをご紹介します。
また、「if-else」の実装方法も掲載しているので、ぜひ参考にしてください。

  • th:if
  • th:switch-th:case

th:if

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

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

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

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

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

<!-- 複数の条件式をつなげて書くことも可能 -->
<!-- 条件式AがTrueかつ条件式BがTrueまたは条件式CがTrueの場合 -->
<th:block th:if="${条件式A and 条件式B or 条件式C}">
  <!-- 処理 -->
</th:block>

Thymeleafでは以下のような比較演算子や等価演算子を使用することができます。

比較演算子>(gt)より大きい
<(lt) 未満
>=(ge)以上
<=(le)以下
等価演算子==(eq)等しい
!=(ne)等しくない

th:switch-th:case

th:switchth:case を組み合わせて2つ以上の条件分岐を実装することができます。
条件式がTrueと判断された場合、th:case文が記述されているタグおよび内部のタグが実行されます。
th:case=* は th:case文の条件のいずれにも当てはまらなかった際に評価されます。

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

その他

th:ifとth:switch-th:case以外に使いやすい条件分岐の実装方法をご紹介します。
ユーティリティオブジェクトの #strings を使用した方法と三項演算子を使用した方法です。

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

<!-- isReadyがTrueの場合OK, Falseの場合NGを表示 -->
<p th:text="${isReady} ? OK : NG"></p>

ユーティリティオブジェクトについては、以下の記事を参考にしてください。

Thymeleafのユーティリティオブジェクト4選

if-elseを実装する

「もし○○なら××、○○でないなら△△」 という処理を実装したい時には、通常if-else文を使用します。
しかし、残念ながらThymeleafには「if-else」にあたる構文はありません

そこで、Thymeleafでif-elseを実装する代替方法として以下の2つをご紹介します。

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

th:unlessを使用する

1つ目は、th:unless を使用する方法です。
th:unless文は条件式を満たさない場合にTrueと判断されます。
つまり、th:unless文にth:if文と同じ条件式を記述することでelseと同じ働きをすることになります。
シンプルで分かりやすい実装方法ですが、可読性は落ちます。

<th:block th:if="${priority == 3}">
  <!-- priorityが3の場合ここに記述した処理が評価される -->
</th:block>
<th:block th:unless="${priority == 3}">
  <!-- priorityが3以外の場合ここに記述した処理が評価される -->
</th:block>

th:switch-th:caseを使用する

2つ目は、th:switchth:case を使用する方法です。
実装方法には少し癖がありますが、th:unlessよりも可読性が高いです。

<!-- priorityが3の場合HIGH, 3以外の場合UNKNOWNを表示 -->
<th:block th:switch="${priority}">
  <p th:case=3 th:text="HIGH"></p>
  <p th:case=* th:text="UNKNOWN"></p>
</th:block>

お疲れさまでした

Thymeleafで制御文th:if/th:switch-th:caseを使用する方法をご紹介しました。
少しでも参考になれば幸いです。

ThymeleafとSpringを一度に学びたくありませんか?

以下の書籍は、Thymeleafを書籍で学びたい人やThymeleafと併せてSpring Frameworkを学習したい人におすすめしている書籍です。
Springについての書籍ですが、Thymeleafの基礎や基本構文から他システムとの連携等30ページほど取り上げられており、ThymeleafとSpringを一度に学べる書籍になっています。
ぜひ一度手に取ってみてください。

どんな記事が読みたいですか?

現在、ミルラクでは記事に関するアンケートを実施しています。
ご回答いただいた内容は今後の記事の役立てていきますので、ぜひご回答ください!