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

Javaを学習したいけれどどの学習サービスを選べば良いか分からないという悩みを抱えていませんか?
Javaは市場価値が高い為、学習サービスを提供しているものも多く、条件に合うものを見つけるのに苦労しますよね。
以下の記事ではJavaを入門レベルから勉強できるおすすめ学習サービスをご紹介しています。
Spring FrameworkやThymeleafがカリキュラムに含まれているものがあるので、ぜひ参考にしてください!
OS | macOS Catalina 10.15.1 |
Eclipse | Photon 2018-09 |
Java | 8 |
Spring Tool Suit | 3.9.6 |
Spring Boot | 2.1.13 |
Thymeleaf | 2.1.2 |
開発および実行環境がない人は、以下の記事を参考に構築してください。
今回は、Thymeleafで制御文を使用する方法として以下の2つをご紹介します。
また、「if-else」の実装方法も掲載しているので、ぜひ参考にしてください。
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
を組み合わせて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>
ユーティリティオブジェクトについては、以下の記事を参考にしてください。
「もし○○なら××、○○でないなら△△」 という処理を実装したい時には、通常if-else文を使用します。
しかし、残念ながらThymeleafには「if-else」にあたる構文はありません。
そこで、Thymeleafでif-elseを実装する代替方法として以下の2つをご紹介します。
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>
2つ目は、th:switch
と th: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を書籍で学びたい人やThymeleafと併せてSpring Frameworkを学習したい人におすすめしている書籍です。
Springについての書籍ですが、Thymeleafの基礎や基本構文から他システムとの連携等30ページほど取り上げられており、ThymeleafとSpringを一度に学べる書籍になっています。
ぜひ一度手に取ってみてください。
現在、ミルラクでは記事に関するアンケートを実施しています。
ご回答いただいた内容は今後の記事の役立てていきますので、ぜひご回答ください!