カテゴリ: Thymeleaf 更新日: 2025/12/13

Thymeleaf 変数にリストやマップを格納する方法を初心者向けにわかりやすく解説

Thymeleaf 変数にリストやマップを格納する方法
Thymeleaf 変数にリストやマップを格納する方法

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

新人

「Thymeleafで変数にリストやマップを入れて、それを画面に表示させたいのですが、どうすればいいですか?」

先輩

「Spring MVCの@Controllerでモデルにリストやマップを渡して、Thymeleafで受け取って表示するのが基本のやり方です。」

新人

「モデルにどうやってリストやマップを入れるのかがまだよくわかりません。実際のコード例はありますか?」

先輩

「もちろんあります。まずはThymeleafが何か、そして変数にリストやマップを入れる考え方から説明しましょう。」

1. Thymeleafとは何か

1. Thymeleafとは何か
1. Thymeleafとは何か

ThymeleafはJavaのサーバーサイドテンプレートエンジンで、主にSpring MVCのWebアプリケーションでHTMLを動的に生成するために使われます。Pleiades環境でGradleを使って開発するときにも、Springの@Controllerから渡したデータをThymeleafテンプレートで簡単に表示できます。

Thymeleafの特徴は、HTMLの中に直接特別な属性を追加して動的な処理を行うことができる点です。例えば、変数を表示したり、繰り返し処理でリストを表示したりすることができます。

Spring MVCのコントローラでモデルに値を入れておけば、Thymeleafで簡単にその値を使えます。これがThymeleafの大きな利点の一つです。

2. 変数にリストやマップを格納する基本的な考え方

2. 変数にリストやマップを格納する基本的な考え方
2. 変数にリストやマップを格納する基本的な考え方

Thymeleafの変数には単純な文字列や数値だけでなく、Javaのリスト(List)やマップ(Map)も格納して扱えます。Spring MVCの@Controllerクラスでモデルにこれらのデータを追加し、Thymeleafテンプレートで表示します。

例えば、モデルにリストを追加すると、Thymeleafのテンプレート側でそのリストをループして表示することができます。同様にマップを渡せば、キーを使って値を取り出して表示も可能です。

この方法を使うことで、複数のデータを効率よく画面に表示できるため、Webアプリケーションの開発において非常に役立ちます。

具体的には、@ControllerのメソッドでModelオブジェクトを使い、model.addAttribute("変数名", データ)という形でリストやマップを追加します。Thymeleafのテンプレートでは、th:eachでリストの繰り返し処理や、th:textでマップの値の表示を行います。

3. Springの@Controllerでリストやマップをモデルに追加する方法

3. Springの@Controllerでリストやマップをモデルに追加する方法
3. Springの@Controllerでリストやマップをモデルに追加する方法

Spring MVCの@Controllerでは、Modelオブジェクトを使ってビューに渡すデータをセットします。リストやマップのような複雑なデータ構造もモデルに追加でき、Thymeleafで簡単に使えます。Pleiades環境でGradleを使ったプロジェクトでも、同じ方法で問題なく動作します。

具体的には、model.addAttribute("変数名", データ)で、リストやマップをモデルに登録します。例えば、ユーザー名のリストや商品のマップなどをコントローラ内で作成し、それをThymeleafに渡せます。


import java.util.List;
import java.util.Map;
import java.util.HashMap;
import java.util.Arrays;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class SampleController {

    @GetMapping("/sample")
    public String showSample(Model model) {
        // リストの作成
        List<String> userList = Arrays.asList("佐藤", "鈴木", "高橋");

        // マップの作成
        Map<String, String> productMap = new HashMap<>();
        productMap.put("A001", "ノートパソコン");
        productMap.put("B002", "スマートフォン");
        productMap.put("C003", "タブレット");

        // モデルに追加
        model.addAttribute("users", userList);
        model.addAttribute("products", productMap);

        return "sampleView";
    }
}

この例では、showSampleメソッドでリストとマップを作成し、モデルにそれぞれusersproductsという名前で追加しています。これにより、Thymeleafのテンプレートでusersproductsを変数として使えます。

4. Thymeleafテンプレート内でリストをループ処理して表示する方法

4. Thymeleafテンプレート内でリストをループ処理して表示する方法
4. Thymeleafテンプレート内でリストをループ処理して表示する方法

Thymeleafでリストの内容を表示したい場合、th:each属性を使って繰り返し処理を行います。上記のコントローラから渡されたusersリストを例に見てみましょう。


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>リスト表示サンプル</title>
</head>
<body>
    <h2>ユーザー一覧</h2>
    <ul>
        <li th:each="user : ${users}" th:text="${user}">ユーザー名</li>
    </ul>
</body>
</html>

このテンプレートでは、th:each="user : ${users}"でモデルのusersリストの要素を一つずつ取り出し、th:text="${user}"で各ユーザー名をリストアイテムとして表示しています。これにより、画面に「佐藤」「鈴木」「高橋」というユーザー名の一覧が表示されます。

この方法は、Pleiadesで作成したGradleプロジェクトでもそのまま使え、Spring MVCモデルの変数をThymeleafで安全かつ簡単に扱えます。

5. マップの値をThymeleafで取得して表示する方法

5. マップの値をThymeleafで取得して表示する方法
5. マップの値をThymeleafで取得して表示する方法

マップの値をThymeleafで表示するには、キーを指定してアクセスします。先ほどのコントローラで渡したproductsマップを例に解説します。

マップのすべてのエントリを繰り返し表示する場合もth:eachを使い、entry.keyentry.valueでキーと値を取得します。


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>マップ表示サンプル</title>
</head>
<body>
    <h2>商品一覧</h2>
    <table border="1">
        <thead>
            <tr><th>商品コード</th><th>商品名</th></tr>
        </thead>
        <tbody>
            <tr th:each="entry : ${products.entrySet()}">
                <td th:text="${entry.key}">コード</td>
                <td th:text="${entry.value}">商品名</td>
            </tr>
        </tbody>
    </table>
</body>
</html>

この例では、products.entrySet()を繰り返し処理し、各エントリのキー(商品コード)と値(商品名)をテーブルのセルに表示しています。これにより、商品コードと商品名の一覧をわかりやすく画面に表示できます。

Spring MVCのモデルにマップを渡してThymeleafで扱う際、この書き方は非常に便利で、Pleiadesの環境でも問題なく動作します。

6. 実践例:リストとマップを組み合わせてThymeleafで表示する応用例

6. 実践例:リストとマップを組み合わせてThymeleafで表示する応用例
6. 実践例:リストとマップを組み合わせてThymeleafで表示する応用例

ここまでの説明で、リストやマップをSpring MVCのモデルに追加し、Thymeleafで表示する基本を理解できたと思います。次はリストとマップを組み合わせて使う応用例を見てみましょう。実際のWebアプリでは、商品一覧に商品コードと名前だけでなく、カテゴリーや価格など複数の情報を扱うことが多いです。

今回は商品コードをキー、商品の詳細情報をマップの値として持ち、それらをリストで管理するイメージです。これにより複雑なデータ構造もThymeleafで扱いやすくなります。


import java.util.List;
import java.util.Map;
import java.util.ArrayList;
import java.util.HashMap;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class ProductController {

    @GetMapping("/products")
    public String showProducts(Model model) {
        List<Map<String, Object>> productList = new ArrayList<>();

        Map<String, Object> product1 = new HashMap<>();
        product1.put("code", "A001");
        product1.put("name", "ノートパソコン");
        product1.put("price", 120000);
        product1.put("category", "電子機器");
        productList.add(product1);

        Map<String, Object> product2 = new HashMap<>();
        product2.put("code", "B002");
        product2.put("name", "スマートフォン");
        product2.put("price", 80000);
        product2.put("category", "電子機器");
        productList.add(product2);

        model.addAttribute("productList", productList);
        return "productView";
    }
}

このコントローラでは、複数の商品の詳細情報をそれぞれマップに格納し、それらをリストにまとめてモデルに渡しています。Thymeleafテンプレートでこの複雑な構造をループで展開して表示していきます。


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>商品詳細一覧</title>
</head>
<body>
    <h2>商品詳細一覧</h2>
    <table border="1">
        <thead>
            <tr>
                <th>商品コード</th>
                <th>商品名</th>
                <th>価格</th>
                <th>カテゴリー</th>
            </tr>
        </thead>
        <tbody>
            <tr th:each="product : ${productList}">
                <td th:text="${product.code}">コード</td>
                <td th:text="${product.name}">名前</td>
                <td th:text="${product.price}">価格</td>
                <td th:text="${product.category}">カテゴリー</td>
            </tr>
        </tbody>
    </table>
</body>
</html>

このテンプレートは、productListの中の各マップをproductとして受け取り、キーを指定して各セルに値を表示しています。こうすることで、Thymeleaf変数の応用的な使い方が理解でき、複雑なリストやマップの組み合わせも簡単に表示可能です。

7. よくあるエラーとその対処法

7. よくあるエラーとその対処法
7. よくあるエラーとその対処法

Thymeleafでリストやマップを扱うとき、初心者の方がよく遭遇するエラーとその対処法を紹介します。これを知っておくとトラブル解決が早くなります。

1. NullPointerException(ヌルポインター例外)

モデルに追加した変数がnullのままだと、Thymeleafのテンプレートでアクセスした際にNullPointerExceptionが発生します。コントローラで必ず値をセットしているか、nullチェックを行うことが重要です。

例えば、リストが空でも必ず空のリストをセットすることでエラーを防げます。

2. 変数名の間違い

Thymeleafで使う変数名がコントローラのモデルで設定した名前と異なる場合、値が表示されません。スペルミスや大文字・小文字の違いに注意してください。

3. マップのキー指定ミス

マップのキーはJavaのキーと完全に一致している必要があります。例えば、product.codeと指定しているのにマップのキーが"Code"だと値が取得できません。キー名は厳密に合わせましょう。

4. ビュー名の設定ミス

コントローラの戻り値はThymeleafテンプレート名と一致している必要があります。Pleiadesでのプロジェクト構成も確認し、テンプレートファイルが正しい場所にあるか確認してください。

これらのエラーに気をつけることで、Spring MVCモデルの使い方やThymeleaf変数の扱いがスムーズになります。

8. まとめ(ポイントのおさらいや今後の学習へのアドバイス)

8. まとめ(ポイントのおさらいや今後の学習へのアドバイス)
8. まとめ(ポイントのおさらいや今後の学習へのアドバイス)

今回はThymeleafの変数にリストやマップを格納し、Spring MVCのモデル経由で画面に表示する方法を解説しました。以下のポイントを押さえておくと良いでしょう。

  • Springの@ControllerでModelにリストやマップをセットし、Thymeleafに渡すことが基本
  • Thymeleafのth:eachを使いリストをループ表示できる
  • マップのキーを正確に指定してth:textで値を表示する
  • リストとマップの組み合わせを使えば複雑なデータも扱いやすい
  • よくあるエラーの原因を理解し、NullPointerExceptionや変数名ミスに注意する

今後は、Spring MVCのフォーム処理やバリデーションと組み合わせてThymeleafを使うことで、より高度なWebアプリケーション開発が可能になります。まずは今回の基本的な使い方をマスターして、少しずつ応用範囲を広げていきましょう。

PleiadesでのGradle環境での開発は今回のコード例の通りですぐに試せるので、実際に手を動かして確かめてみてください。

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

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

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

Thymeleafとは何ですか?JavaのWeb開発でどんな役割を持つテンプレートエンジンですか?

Thymeleafとは、Spring MVCと組み合わせてWebアプリケーションのHTMLを動的に生成できるテンプレートエンジンです。HTMLに独自属性を追加し、コントローラから渡された変数を表示したり、リストのループ処理・条件分岐などが簡単にできます。

今後Thymeleafをさらに活用するには何を学べばいいですか?

フォーム入力、バリデーション、fragmentの共通化、レイアウト管理などを学ぶと、より本格的な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)を完全解説!初心者でもわかるセッションの仕組み