Thymeleafのth:each属性のメモ。
th:each属性は、タグを繰り返す指定。
th:each属性を付けたタグは、「th:each属性に指定したコレクション」の個数分出力される。
th:each属性の基本形は以下のようになる。
th:each="変数名 : コレクション"
コレクション内の要素が変数(繰り返し用変数)に入り、「${変数名}
」や「${変数名.プロパティー名}
」で使用できる。
また、要素毎のステータスを取得することも出来る。
th:each="変数名, ステータス変数名 : コレクション"
これにより、例えば「${ステータス変数名.index}
」でインデックス(0オリジン)、「${ステータス変数名.count}
」で番号(1オリジン)を取得することが出来る。
名前 | 説明 |
---|---|
index |
現在のインデックス(0オリジン) |
count |
現在の番号(1オリジン) |
size |
コレクションの要素数 |
current |
現在のオブジェクト(繰り返し用変数と同じ) |
even |
インデックスが偶数かどうか |
odd |
インデックスが奇数かどうか |
first |
先頭かどうか |
last |
最後かどうか |
ステータス変数を明示的に定義しない場合、繰り返し用変数名の末尾に「Stat」を付けたものがステータス変数として使用できる。
ステータス変数の例。
package com.example.demo.web; import java.util.Arrays; import java.util.List; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping;
@Controller public class EachController { @RequestMapping(path = "example/each") public String init(Model model) { List<String> list = Arrays.asList("aa", "bb", "cc"); model.addAttribute("list", list); return "each"; } }
<table border="1"> <tr> <th>element</th> <th>index</th> <th>count</th> <th>size</th> <th>current</th> <th>even</th> <th>odd</th> <th>first</th> <th>last</th> </tr> <tr th:each="element, elementStat : ${list}"> <td th:text="${element}"></td> <td th:text="${elementStat.index}"></td> <td th:text="${elementStat.count}"></td> <td th:text="${elementStat.size}"></td> <td th:text="${elementStat.current}"></td> <td th:text="${elementStat.even}"></td> <td th:text="${elementStat.odd}"></td> <td th:text="${elementStat.first}"></td> <td th:text="${elementStat.last}"></td> </tr> </table>
↓生成された結果
element | index | count | size | current | even | odd | first | last |
---|---|---|---|---|---|---|---|---|
aa | 0 | 1 | 3 | aa | true | false | true | false |
bb | 1 | 2 | 3 | bb | false | true | false | false |
cc | 2 | 3 | 3 | cc | true | false | false | true |