カテゴリ: SpringのWeb開発(Spring MVC) 更新日: 2025/12/14

条件分岐(th:switch)を完全ガイド!初心者でもわかる基本的な使い方

条件分岐(th:switch)
条件分岐(th:switch)

新人と先輩の会話形式で理解しよう

新人

「Spring MVCで複数の条件に応じた表示をしたいんですが、どうすればいいですか?」

先輩

「それなら、Thymeleafのth:switchth:caseを使うと便利だよ。複数の条件分岐が簡単に書けるんだ。」

新人

th:switchって具体的にどう使うんですか?」

先輩

「じゃあ、基本的な使い方とメリットを順番に説明していこう!」

1. 条件分岐とは?

1. 条件分岐とは?
1. 条件分岐とは?

条件分岐は、特定の条件に基づいてプログラムの処理を分ける仕組みです。Web開発では、ユーザーの状態やデータに応じて表示内容を変えることがよくあります。例えば、ユーザーが管理者かどうかで表示するメニューを変えたり、商品の在庫状況に応じて「在庫あり」「在庫なし」と表示したりする場面があります。

2. th:switchとは何か?

2. th:switchとは何か?
2. th:switchとは何か?

th:switchは、Thymeleafで複数の条件分岐を扱うための属性です。Javaのswitch文と同じように、指定した値に応じて異なるHTML要素を表示できます。条件が多い場合や、読みやすいコードを維持したいときに便利です。

【基本的な構文】


<div th:switch="${status}">
    <p th:case="'NEW'">新規登録</p>
    <p th:case="'IN_PROGRESS'">処理中</p>
    <p th:case="'COMPLETED'">完了</p>
    <p th:case="'*'">不明な状態</p>
</div>

この例では、status'NEW'なら「新規登録」、'IN_PROGRESS'なら「処理中」、'COMPLETED'なら「完了」が表示されます。th:case="'*'"はデフォルトのケースで、該当する条件がない場合に表示されます。

3. th:switchを使うメリット

3. th:switchを使うメリット
3. th:switchを使うメリット
  • コードの可読性向上: 複数の条件をth:ifで書くよりもスッキリします。
  • メンテナンス性向上: 条件が増えても整理しやすくなります。
  • パフォーマンス改善: 適切に使うことでHTMLレンダリング時の無駄を減らせます。

特に、条件が3つ以上ある場合はth:switchを使うことでHTMLが見やすくなり、バグも減ります。Spring MVCでモデルデータを受け取り、条件に応じた動的表示が求められる場面で非常に役立ちます。

4. th:switchを使った基本的な条件分岐の実例

4. th:switchを使った基本的な条件分岐の実例
4. th:switchを使った基本的な条件分岐の実例

th:switchは、複数の条件に基づいてHTMLの表示内容を切り替えるときに非常に便利です。ここでは、ユーザーの役割(管理者・一般ユーザー・ゲスト)に応じたメッセージを表示する簡単な実例を紹介します。

【コントローラの作成】


@Controller
public class RoleController {

    @GetMapping("/user-role")
    public String showUserRole(Model model) {
        String userRole = "ADMIN"; // ユーザーの役割(例: ADMIN, USER, GUEST)
        model.addAttribute("userRole", userRole);
        return "user-role";
    }
}

【HTMLファイル(user-role.html)の作成】


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>ユーザーの役割表示</title>
</head>
<body>
    <h2>ユーザーの役割に応じたメッセージ</h2>
    <div th:switch="${userRole}">
        <p th:case="'ADMIN'">管理者としてログインしています。</p>
        <p th:case="'USER'">一般ユーザーとしてログインしています。</p>
        <p th:case="'GUEST'">ゲストとしてアクセスしています。</p>
        <p th:case="'*'">不明な役割です。</p>
    </div>
</body>
</html>

上記のコードでは、コントローラで渡されたuserRoleの値に応じてメッセージが切り替わります。userRole"ADMIN"の場合、以下のように表示されます。


管理者としてログインしています。

このようにth:switchを使うと、条件分岐が整理され、コードの可読性が向上します。

5. th:caseの使い方と複数条件の処理

5. th:caseの使い方と複数条件の処理
5. th:caseの使い方と複数条件の処理

th:caseは、th:switchの中で特定の条件に該当する場合に表示を切り替えるために使用します。複数の値に対して同じ処理を行いたい場合は、th:caseに複数の値をカンマ区切りで指定できます。

【コントローラの作成】


@Controller
public class OrderController {

    @GetMapping("/order-status")
    public String showOrderStatus(Model model) {
        String orderStatus = "SHIPPED"; // 注文のステータス
        model.addAttribute("orderStatus", orderStatus);
        return "order-status";
    }
}

【HTMLファイル(order-status.html)の作成】


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>注文ステータス表示</title>
</head>
<body>
    <h2>注文ステータス確認</h2>
    <div th:switch="${orderStatus}">
        <p th:case="'PENDING'">注文受付中です。</p>
        <p th:case="'PROCESSING'">注文処理中です。</p>
        <p th:case="'SHIPPED','DELIVERED'">注文が出荷済みまたは配送済みです。</p>
        <p th:case="'*'">ステータスが不明です。</p>
    </div>
</body>
</html>

orderStatus"SHIPPED"または"DELIVERED"の場合、以下のように表示されます。


注文が出荷済みまたは配送済みです。

このように複数の値に同じ処理を適用できることで、条件分岐を簡潔に書けます。

6. th:switchと他の条件分岐(th:if, th:unless)の違いと使い分け

6. th:switchと他の条件分岐(th:if, th:unless)の違いと使い分け
6. th:switchと他の条件分岐(th:if, th:unless)の違いと使い分け

条件分岐では、th:switch以外にもth:ifth:unlessが使用できます。それぞれの違いと使い分けを理解することで、より効率的にコードを書くことができます。

【th:switchとth:ifの比較】

  • th:switch: 複数の条件を簡潔に書きたいときに有効。
  • th:if: 単純な条件や少数の条件分岐に適している。

【例: th:ifを使った場合】


<p th:if="${status == 'NEW'}">新規登録</p>
<p th:if="${status == 'IN_PROGRESS'}">処理中</p>
<p th:if="${status == 'COMPLETED'}">完了</p>
<p th:if="${status != 'NEW' and status != 'IN_PROGRESS' and status != 'COMPLETED'}">不明な状態</p>

【例: th:switchを使った場合】


<div th:switch="${status}">
    <p th:case="'NEW'">新規登録</p>
    <p th:case="'IN_PROGRESS'">処理中</p>
    <p th:case="'COMPLETED'">完了</p>
    <p th:case="'*'">不明な状態</p>
</div>

th:switchを使うと、条件が多い場合でもコードが短く、読みやすくなります。

【使い分けのポイント】

  • 条件が3つ以上ある場合はth:switchを推奨。
  • 単純なtrue/false判定の場合はth:ifth:unlessが便利。
  • コードの可読性とメンテナンス性を重視して選ぶことが大切。

7. th:switchを使う際のよくあるエラーとその対処法

7. th:switchを使う際のよくあるエラーとその対処法
7. th:switchを使う際のよくあるエラーとその対処法

th:switchを使用する際、初心者がつまずきやすいポイントやよくあるエラーについて解説します。これらのエラーを事前に理解しておくことで、開発中のトラブルを未然に防げます。

【エラー1: th:switchの値がnullの場合】

th:switchに渡す値がnullだと、該当するth:caseが見つからず、意図しない表示になります。


<div th:switch="${status}">
    <p th:case="'NEW'">新規登録</p>
    <p th:case="'IN_PROGRESS'">処理中</p>
    <p th:case="'COMPLETED'">完了</p>
    <p th:case="'*'">ステータス不明</p>
</div>

対処法: モデルに値を渡す前に、コントローラでデフォルト値を設定するか、HTML内でth:case="'*'を必ず記述しましょう。

【エラー2: th:caseの値が一致しない】

モデルから渡される値とth:caseの値が完全一致しない場合、条件分岐が機能しません。

例: モデルで"Admin"と渡しているのに、HTML側で'ADMIN'と大文字指定している場合。


// コントローラ側
model.addAttribute("userRole", "Admin");


<p th:case="'ADMIN'">管理者</p> <!-- これでは一致しない -->

対処法: 値の大文字小文字を統一するか、toUpperCase()toLowerCase()を利用して整えましょう。

【エラー3: th:switch内でth:caseが複数該当する場合】

異なるth:caseで同じ条件を指定すると、意図しない表示が起こります。必ず一意の条件を設定してください。

8. th:switchを使ったベストプラクティスと注意点

8. th:switchを使ったベストプラクティスと注意点
8. th:switchを使ったベストプラクティスと注意点

th:switchを活用する際のベストプラクティスと、初心者が見落としがちな注意点を紹介します。

【ベストプラクティス1: デフォルトケースを常に書く】

すべてのケースに該当しない場合に備えて、th:case="'*'"を必ず用意しましょう。


<p th:case="'*'">該当する情報がありません。</p>

【ベストプラクティス2: コードの可読性を優先】

条件が多い場合はth:switchを、条件が少ない場合はth:ifを使うことで、コードが読みやすくなります。

【注意点: null値や予期しないデータ型の処理】

モデルにデータが存在しない場合、画面が空白表示になることがあります。Objects.requireNonNull()やデフォルト値を設定して、安定した動作を確保しましょう。

9. 実践!簡単なユーザー権限表示アプリの作成例

9. 実践!簡単なユーザー権限表示アプリの作成例
9. 実践!簡単なユーザー権限表示アプリの作成例

ここでは、th:switchを使用して、ユーザーの権限に応じたメッセージを表示する簡単なアプリを作成します。

【ステップ1: コントローラの作成】


@Controller
public class UserController {

    @GetMapping("/user-info")
    public String showUserInfo(Model model) {
        String userRole = "USER"; // 権限: ADMIN, USER, GUEST
        model.addAttribute("userRole", userRole);
        return "user-info";
    }
}

【ステップ2: HTMLテンプレート(user-info.html)の作成】


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>ユーザー情報</title>
</head>
<body>
    <h2>権限別メッセージ</h2>
    <div th:switch="${userRole}">
        <p th:case="'ADMIN'">管理者ダッシュボードへようこそ。</p>
        <p th:case="'USER'">一般ユーザーのページへようこそ。</p>
        <p th:case="'GUEST'">ゲストアクセス中です。</p>
        <p th:case="'*'">権限が不明です。</p>
    </div>
</body>
</html>

【ステップ3: 実行結果の確認】

コントローラでuserRole"USER"の場合、ブラウザには以下のように表示されます。


一般ユーザーのページへようこそ。

権限を変更すれば、他のメッセージも表示されます。

【ポイント】

  • 必ずth:case="'*'"を用意してエラー回避。
  • ユーザー権限などの条件分岐で、th:switchは特に有効。
  • 条件が増えてもコードの見通しが良く、保守がしやすくなる。

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Thymeleafのth:switchとは何ですか?初心者にもわかる説明が知りたいです

Thymeleafのth:switchとは、指定した値に応じて異なるHTML要素を表示できる条件分岐の仕組みです。Javaのswitch文と似ており、Web画面の表示を条件ごとに切り替えたいときに便利です。複数条件がある場合、コードが読みやすくなるのが特徴です。
コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

カテゴリの一覧へ
新着記事
New1
Spring認証(Spring Security)
Spring BootでCORSを設定する方法を完全解説!初心者でもわかるセキュリティ対策
New2
Spring認証(Spring Security)
パスワードをハッシュ化する理由とは?セキュリティ対策の基本をSpring Securityで学ぼう
New3
SpringのWeb開発(Spring MVC)
HTTPリクエストとレスポンスの基本を完全解説!Spring MVC初心者がWeb通信の仕組みをやさしく理解
New4
Spring認証(Spring Security)
ブラウザからのフォーム送信とは?HTTPリクエストの基礎を初心者向けに解説!
人気記事
No.1
Java&Spring記事人気No1
SpringのWeb開発(Spring MVC)
ルーティングとは?基本概念(Spring MVCのURL制御を理解)
No.2
Java&Spring記事人気No2
Thymeleaf
Thymeleaf とは?初心者向けにThymeleafの基本を徹底解説
No.3
Java&Spring記事人気No3
Springの基本
application.properties と YAML の基本をやさしく解説!初心者向けSpring Boot設定ファイル入門
No.4
Java&Spring記事人気No4
Springの基本
Spring Bootのデフォルトログ設定を徹底解説(Logback / SLF4J)
No.5
Java&Spring記事人気No5
Springの基本
Spring Bootの環境変数の設定方法をやさしく解説!初心者向けapplication.propertiesの使い方
No.6
Java&Spring記事人気No6
SpringのWeb開発(Spring MVC)
ループ処理(th:each)の基本を完全ガイド!Thymeafの繰り返し処理の使い方
No.7
Java&Spring記事人気No7
SpringのDB操作
JPAの標準クエリメソッド(findById, findAll)を完全解説!初心者でもわかるデータ取得の基本
No.8
Java&Spring記事人気No8
Spring認証(Spring Security)
セッション管理の基本(@SessionAttributes)を完全解説!初心者でもわかるセッションの仕組み