Thymeleafでif複数条件をまとめて処理する方法を初心者向けに解説
新人
「先輩、Thymeleafでif文の条件を複数まとめて書きたいんですが、どんなふうに書くんですか?」
先輩
「Thymeleafでは、複数条件をandやorでつなげてまとめて書くことができますよ。」
新人
「複数条件をうまく使うコツってありますか?」
先輩
「もちろんあります。まずは、if文の基本と複数条件の書き方をしっかり押さえるのが大事です。順番に見ていきましょう!」
1. Thymeleafのif文の基本(th:ifの役割)
Thymeleafは、Spring Bootアプリケーションで使われるテンプレートエンジンで、HTMLファイルにJavaのデータを埋め込む仕組みを提供しています。開発環境は、Pleiadesを使い、Gradleでプロジェクトを作成して進めることが一般的です。コントローラは@Controllerを使い、Modelに値をセットしてHTMLに渡します。
Thymeleafのif文は、HTMLの要素にth:if属性を付けて条件分岐を行います。例えば、コントローラから渡された変数messageがnullではないときだけ表示するには、次のように書きます。
<p th:if="${message != null}" th:text="${message}">ここにメッセージが表示されます。</p>
このように、th:ifは条件がtrueの場合に要素を表示する役割があります。条件がfalseの場合は、要素自体がレンダリングされません。初心者の方は、まずこの基本構文をしっかり理解しておくことが大切です。
2. if文で複数条件をまとめて書く方法の概要
Thymeleafでは、if文の条件に複数の条件をまとめて書くことができます。複数条件を使うことで、例えば「AもBも条件を満たすときだけ表示する」といった複雑な条件分岐をシンプルに表現できます。条件をまとめるときは、and(かつ)やor(または)を使います。
例えば、変数userNameがnullではなく、さらにuserAgeが18以上のときだけ表示する条件は次のように書けます。
大人のユーザー名:
この例では、andを使って「userNameがnullではない かつ userAgeが18以上」という条件をまとめています。逆に、どちらかがtrueなら表示する条件はorを使います。
複数条件をまとめて書くときは、条件式をシンプルにすることが重要です。条件が複雑になりすぎると、後から見たときにわかりにくくなります。必要に応じて条件式を分割するか、コントローラ側で事前に判定をして変数を用意しておくのも良い方法です。
次回の記事では、よく使われる複数条件のパターンや書き方のコツについてさらに詳しく解説していきます。
3. よく使われる複数条件のパターン
Thymeleafでif複数条件をまとめて書くとき、いくつか代表的なパターンがあります。初心者向けに理解しやすいように、具体例を挙げながら紹介します。
3‑1. and(かつ)を使った条件
例えば、ユーザー名userNameがnullでなく、かつ年齢userAgeが18歳以上の場合だけ「会員メッセージ」を表示するケースです。
ようこそ、さん!会員メッセージです。
3‑2. or(または)を使った条件
また、メールアドレスemailまたは電話番号phoneが設定されていれば連絡可能と表示する例です。
<p th:if="${email != null or phone != null}">
連絡先が登録されています。
</p>
3‑3. 混合条件の例
複数のand/orを組み合わせる場合は、優先順位に注意しながら書きます。以下は「ユーザーがログイン済みで、かつ(管理者または有料会員)」という条件です。
<p th:if="${isLoggedIn and (isAdmin or isPremium)}">
特別なダッシュボードにアクセスできます。
</p>
4. 複数条件を書くときの注意点とよくあるミス
複数条件をThymeleafで書くときには、以下のようなミスや注意点があります。初心者向けにわかりやすく説明します。
4‑1. 順序と()の使い忘れ
複数のand/orを組み合わせるときは、()で囲まないと意図しない条件評価になることがあります。
<!-- NG例 -->
<p th:if="${isLoggedIn and isAdmin or isPremium}">
一部の人に表示されますが、意図と異なる結果に -->
</p>
<!-- OK例 -->
<p th:if="${isLoggedIn and (isAdmin or isPremium)}">
より明確に条件をまとめています。
</p>
4‑2. null比較のミス
null判定は常に!= nullや== nullで行い、'null'のような文字列と比較しないように注意します。
4‑3. 条件式が長くなりすぎる
複雑な条件を書きすぎるとHTMLが読みにくくなります。コントローラであらかじめ判定したboolean変数を渡す仕組みにすると、テンプレートがすっきりします。
5. 実践例で理解を深めよう
実際のコードで複数条件の使い方を確かめてみましょう。以下は、Gradle+Pleiades環境のサンプルコントローラです。
@Controller
public class OrderController {
@GetMapping("/order/status")
public String showOrder(Model model) {
Boolean isMember = true;
Integer orderCount = 5;
model.addAttribute("isMember", isMember);
model.addAttribute("orderCount", orderCount);
return "orderStatus";
}
}
このコントローラから渡された変数を使い、HTML側でメッセージを切り替えます。
ご注文ありがとうございます!
注文がまだのようです。ぜひ商品をご覧ください。
このように、複数条件をまとめて書くことで、会員かつ注文ありの場合にだけ特定の表示を行えます。非常に実用的なパターンです。
初心者の方は、このような実践例を動かして、条件を変更したり変数をnullにしたりして挙動を確認すると、理解が深まります。
次回は後半で、コントローラ側の工夫や練習のコツを紹介します
ここまでで、Thymeleafでif複数条件を使う基本と、よくあるパターン、注意点、実践例まで解説しました。次回の記事では、コントローラ側でboolean変数を使った工夫や、初心者向けの練習方法、記事のまとめを紹介します。
6. コントローラで複数条件を扱うときのポイント
コントローラで複数条件を扱う場合は、なるべくHTMLテンプレート内で条件を組み立てなくても済むように工夫すると、コードが読みやすくなります。Pleiades + Gradle環境で@Controllerを使う際に意識したいポイントを紹介します。
6‑1. boolean変数をModelに追加する
HTML側で複数条件を記述するのではなく、コントローラ側であらかじめ判定した結果をModelに格納しておく方法です。
@Controller
public class AccessController {
@GetMapping("/access")
public String showAccess(Model model) {
boolean isLoggedIn = true;
boolean isAdmin = false;
boolean canAccess = isLoggedIn && isAdmin;
model.addAttribute("canAccess", canAccess);
return "access";
}
}
このようにcanAccessをModelにセットしておけば、HTMLでは以下のようにシンプルに使えます。
<p th:if="${canAccess}">
管理者画面にアクセスできます。
</p>
<p th:unless="${canAccess}">
管理者権限がありません。
</p>
6‑2. 複数条件のロジックはJava側でまとめる
複雑な条件式はJava側に集めて、テンプレートで使う変数は最低限に抑えると、HTMLがすっきりします。
@Controller
public class DiscountController {
@GetMapping("/discount")
public String showDiscount(Model model) {
int purchaseCount = 3;
boolean isPremium = true;
boolean eligible = (purchaseCount > 2 && isPremium);
model.addAttribute("eligible", eligible);
return "discount";
}
}
6‑3. 条件の変化に対応するテストを行おう
開発中は、purchaseCountやisPremiumの値を切り替えてからブラウザで表示を確認しましょう。変更を反映しやすいようにテストしながら進めると、実際の動作がイメージできます。
7. 初心者が練習するときのポイントとコツ
Thymeleafの複数条件を練習するときに覚えておきたいポイントとコツを紹介します。
7‑1. 小さなサンプルで動きを確認
まず、Pleiadesで新しいGradleプロジェクトを作成し、@Controllerを使ってboolean変数をModelに渡すだけの簡単なサンプルを作り、Thymeleaf側ではth:ifのand/orを確認してみましょう。
7‑2. 条件のパターンを変えてみよう
次に、boolean条件をいくつか用意して、and・orの組み合わせを試すことで、条件分岐の意味が体感的にわかります。初心者の皆さんにとって、手を動かしながら確認することが理解への近道です。
7‑3. コントローラとHTMLの関係を意識
コントローラで作った変数はModelを通してHTMLに渡るため、名前(キー)を分かりやすく付けることが大切です。可読性を意識してコードを書く習慣をつけましょう。
7‑4. デバッグはSystem.out.printlnでもOK
まだSpring Bootに慣れていない初心者なら、コントローラ内でSystem.out.println("値:" + variable)を使って、値の中身を確認してみましょう。簡単なことですが、大きな手助けになります。
8. 記事のまとめ
この記事では、Pleiades + Gradle + @Controllerの環境でThymeleafの複数条件のif文を初心者向けに解説しました。
- HTML側で
th:if="${A and B}"やorを使って複数条件をまとめて表現できる - Java側でboolean変数にまとめてModelに渡すとHTMLがすっきり書ける
- and/orの組み合わせや()の使い方の注意点を覚えることで条件分岐のミスを減らせる
- 初心者は小さなサンプルで手を動かしながら理解を深めよう
Thymeleafは条件分岐だけでなく、繰り返し処理や変数操作など便利な機能がそろっています。今回学んだ複数条件の書き方をステップにして、さらに他の機能もマスターしていきましょう!