Thymeleafの#listsユーティリティの使い方を初心者向けに解説!リスト操作・サイズ取得・要素検索までまとめて紹介
生徒
「Thymeleafのテンプレート内でリストを操作する簡単な方法はありますか?」
先生
「はい!Thymeleafには#listsという便利なユーティリティが用意されています。この機能を使うことで、リストの操作が簡単になりますよ。」
生徒
「リストを操作できると便利そうですね。どんなことができるんですか?」
先生
「それでは、#listsの基本から使い方を具体例を交えて見ていきましょう!」
1. #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には、指定した範囲だけを取り出す#lists.slice(list, from, to)があります。
ここでのfromとtoは「0から始まる番号」で、終端のtoも含まれるのがポイントです。
まずは「先頭から3件だけ」を表示する最小サンプルで感覚をつかみましょう。
<ul>
<!-- 0,1,2番目=先頭から3件を切り出して表示 -->
<li th:each="item : ${#lists.slice(myList, 0, 2)}" th:text="${item}">サンプル</li>
</ul>
途中の一部分だけを見たいときも同じ考え方です。次の例では、2〜4番目の3件を取り出しています。 取り出した要素に連番を付けたい場合は、イテレーションステータスを併用すると分かりやすくなります。
<ul>
<!-- 2,3,4番目を切り出し。stat.indexで0始まりの番号を取得 -->
<li th:each="item, stat : ${#lists.slice(myList, 2, 4)}">
<span th:text="${stat.index}">0</span> : <span th:text="${item}">サンプル</span>
</li>
</ul>
件数が少ない場合に「存在しない範囲」を指定すると分かりにくくなりがちです。
そのときは、サイズに合わせて終端を調整すると安全です(size-1が末尾の番号)。
空リストの場合はメッセージを出すように分岐しておくと親切です。
表示できるデータがありません。
- サンプル
このようにsliceを使うと、一覧の「先頭だけ」「途中だけ」「最大N件まで」といった切り出しが
コントローラの追加実装なしで表現できます。まずは先頭数件の表示から試して、必要に応じて範囲を調整してみてください。
4. リストに特定の要素が含まれているか確認する
「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を他のユーティリティと組み合わせて使ってみます!」
先生
「いいですね!試してみて、また質問があればいつでも聞いてください。」
この記事を読んだ人からの質問
「この記事を読んだ人からの質問」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。