Thymeleafの#listsユーティリティの使い方を初心者向けに解説!リスト操作・サイズ取得・要素検索までまとめて紹介
生徒
「Thymeleafのテンプレート内でリストを操作する簡単な方法はありますか?」
先生
「はい!Thymeleafには#listsという便利なユーティリティが用意されています。この機能を使うことで、リストの操作が簡単になりますよ。」
生徒
「リストを操作できると便利そうですね。どんなことができるんですか?」
先生
「それでは、#listsの基本から使い方を具体例を交えて見ていきましょう!」
1. #listsユーティリティの基本
Thymeleafの#listsは、テンプレート内で「配列・コレクションの扱い」を直感的に書けるユーティリティです。
コントローラで渡したmyListに対して、要素数の取得・先頭や末尾の取得・空判定などを
HTMLの中だけで簡潔に表現できます。まずは「サイズ」「空かどうか」「先頭を表示」の3つから始めると理解が早いです。
#lists.size(list):要素数を数えます。#lists.isEmpty(list):空リストかを判定します。#lists.first(list)/#lists.last(list):先頭/末尾の要素を取得します。
次の最小サンプルは、画面に件数を出し、空ならメッセージ、あれば先頭要素を表示します。
<!-- 件数の表示 -->
<p>件数:<span th:text="${#lists.size(myList)}">0</span> 件</p>
<!-- 空リストかどうかの分岐 -->
<p th:if="${#lists.isEmpty(myList)}">いま表示できるデータはありません。</p>
<!-- 先頭要素の表示(空でなければ) -->
<p th:if="${!#lists.isEmpty(myList)}">
最初の要素:<span th:text="${#lists.first(myList)}">サンプル</span>
</p>
まずはこの3点だけ押さえれば、一覧ページや簡単なサマリ表示がすぐに作れます。
余計な条件分岐をJava側に書かなくても、テンプレートだけで分かりやすく表現できるのが#listsの強みです。
2. リストから特定の要素を取得する
#listsを使うと、テンプレートの中だけで「先頭」「末尾」「任意の位置」といった要素を簡単に取り出せます。
コントローラ側で特別な処理を足す必要はありません。まずは最もよく使う「先頭」と「末尾」から見ていきましょう。
空のときはnullになる点だけ覚えておけば安全に扱えます。
<!-- 先頭・末尾をそのまま表示(空のときは空文字にする例) -->
<p>先頭: <span th:text="${#lists.first(myList) ?: ''}"></span></p>
<p>末尾: <span th:text="${#lists.last(myList) ?: ''}"></span></p>
「特定の位置」を取りたいときは、インデックス指定で1件だけ取り出すこともできます。 例えば0番目(最初)の要素を確実に表示したい場合は、空チェックと組み合わせると分かりやすくなります。
<!-- 任意の位置(0番目)を取り出すサンプル。空ならメッセージ表示 -->
<p th:if="${#lists.isEmpty(myList)}">データがありません。</p>
<p th:if="${!#lists.isEmpty(myList)}">
0番目の要素: <span th:text="${#lists.first(myList)}">サンプル</span>
</p>
これらを組み合わせれば、「最初だけ強調表示」「最後の更新項目をヘッダーに出す」など、 ちょっとした見せ方をテンプレートの中で完結できます。まずは先頭・末尾の取得を押さえ、 空リスト時の表示を決めておくと、画面づくりが安定します。
3. リストの一部を取得する(サブリスト)
#listsでは、リストの一部分を取得することも可能です。例えば、以下のコードはリストの0番目から2番目の要素を取得して表示します。
<ul>
<li th:each="item : ${#lists.slice(myList, 0, 2)}" th:text="${item}"></li>
</ul>
これにより、リストの一部分だけを表示するテンプレートが簡単に作成できます。
4. リストに特定の要素が含まれているか確認する
#lists.contains()を使えば、リストに特定の要素が含まれているかを確認できます。以下の例をご覧ください。
<p th:text="${#lists.contains(myList, 'Thymeleaf')} ? '含まれています' : '含まれていません'"></p>
このコードでは、リストに「Thymeleaf」という文字列が含まれている場合に「含まれています」、含まれていない場合に「含まれていません」と表示します。
5. リストを操作する応用例
以下は、リストの操作を組み合わせた応用例です。このコードでは、リストのサイズを表示し、特定の要素が含まれているかを確認し、最後にリストの先頭要素を表示します。
<p>リストのサイズ: <span th:text="${#lists.size(myList)}"></span></p>
<p th:text="${#lists.contains(myList, 'Spring')} ? 'リストにSpringが含まれています' : 'Springは含まれていません'"></p>
<p>リストの最初の要素: <span th:text="${#lists.first(myList)}"></span></p>
これにより、テンプレート内で複雑なリスト操作を簡単に実現することができます。
6. まとめ
本記事では、Thymeleafの#listsユーティリティを活用してリスト操作を簡単に行う方法を学びました。#listsを使うことで、リストのサイズを取得したり、特定の要素を取得したり、部分リストを作成することができるようになります。さらに、特定の要素がリストに含まれているか確認する機能もあり、テンプレート内でのリスト操作が非常に柔軟で便利になります。
特に、#lists.first()や#lists.last()のようなシンプルなメソッドから、#lists.slice()や#lists.contains()といった応用的な操作まで、幅広いニーズに対応しています。また、リスト操作を他のThymeleafユーティリティと組み合わせることで、より複雑な処理も簡単に実現できる点が魅力です。
以下に本記事のサンプルコードを振り返りとして再掲します。これらを参考に、自分のプロジェクトで試してみてください。
<p>リストのサイズ: <span th:text="${#lists.size(myList)}"></span></p>
<p th:text="${#lists.contains(myList, 'Thymeleaf')} ? 'リストにThymeleafが含まれています' : 'Thymeleafは含まれていません'"></p>
<ul>
<li th:each="item : ${#lists.slice(myList, 0, 2)}" th:text="${item}"></li>
</ul>
<p>リストの最初の要素: <span th:text="${#lists.first(myList)}"></span></p>
<p>リストの最後の要素: <span th:text="${#lists.last(myList)}"></span></p>
これらのコードを実践で使うことで、Thymeleafのテンプレートエンジンの強力さをさらに感じることができるでしょう。
生徒
「今回の記事で、Thymeleafの#listsユーティリティの使い方がよくわかりました!リストの操作がこれほど簡単にできるとは思いませんでした。」
先生
「その通りです!リスト操作は多くのWebアプリケーションで必要な機能なので、#listsを使いこなせば、テンプレートのコードを簡潔に保つことができますよ。」
生徒
「はい!次は#listsを他のユーティリティと組み合わせて使ってみます!」
先生
「いいですね!試してみて、また質問があればいつでも聞いてください。」