官网文档:https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#using-theach
Thymeleaf 遍历对象都使用 th:each。
可以遍历的对象:
任何实现 java.util.Iterable 接口的对象;
任何实现 java.util.Enumeration 接口的对象;
任何实现 java.util.Iterator 接口的对象,其值将在迭代器返回时使用,而无需缓存内存中的所有值(这句话暂时不知道什么意思);
任何实现 java.util.Map 接口的对象,遍历时,应用对象的类型是java.util.Map.Entry;
任何数组;
任何其他对象,遍历时会将此对象作为当前集合的唯一值,即长度等于1的集合;
格式:
th:each="obj:${item}" th:each="obj,stat:${item}"
stat,遍历信息,属性:
index: 当前索引,从0开始
count: 当前索引,从1开始
size: 当前所遍历集合的长度
current: 当前遍历对象,等同于obj
even: 是否是偶数(true|false)
odd:是否是奇数(true|false)
first: 是否是第一个(true|false)
last: 是否是最后一个(true|false)
代码举例
Java代码:
@RequestMapping("/to") public ModelAndView to () { User user1 = new User(); user1.setId(11L); user1.setName("姓名11"); user1.setAge(11); User user2 = new User(); user2.setId(12L); user2.setName("姓名12"); user2.setAge(12); User user3 = new User(); user3.setId(13L); user3.setName("姓名13"); user3.setAge(13); List<User> list = new ArrayList<User>(); list.add(user1); list.add(user2); list.add(user3); Map<String, User> map = new HashMap<String, User>(); map.put("user1", user1); map.put("user2", user2); map.put("user-3", user2); ModelAndView m = new ModelAndView("to"); return m.addObject("str", "hello world!").addObject("list", list).addObject("map", map); }
Thymeleaf代码:
<body> 遍历单一值: <ul> <li th:each="s,stat:${str}" th:text="${s}"></li> </ul> <div th:if="${#lists.isEmpty(list)}"> list 列表是空的! </div> <div th:unless="${#lists.isEmpty(list)}" > <span th:text="'list 列表长度是:' + ${#lists.size(list)}"></span> <ul> <li th:each="user,userStat : ${list}" th:text="'序号:' + ${userStat.count} + ' - 第一个?: ' + ${userStat.first} + ' - 最后一个?: ' + ${userStat.last} + ' - 偶数行: ' + ${userStat.even} + ' - 奇数行: ' + ${userStat.odd} + ' - ID: ' + ${user.id} + ' - name: ' + ${user.name} + ' - age: ' + ${user.age}"></li> </ul> </div> <div th:if="${#maps.isEmpty(map)}"> map集合是空的! </div> <div th:unless="${#maps.isEmpty(map)}" > <span th:text="'map集合长度是:' + ${#maps.size(map)}"></span> <ul> <li th:each="keyAndValue,userStat : ${map}" th:text="'序号:' + ${userStat.count} + ' - key: ' + ${keyAndValue.key} + ' - ID: ' + ${keyAndValue.value.id} + ' - name: ' + ${map.get(userStat.current.key).name} + ' - age: ' + ${userStat.current.value.age}" ></li> </ul> <span>获取 key = user1 信息</span> name: <span th:text="${map.get('user1').name}"></span> age: <span th:text="${map['user1'].age}"></span> </div> </body>
结果:
遍历单一值:
- hello world!
list 列表长度是:3
- 序号:1 - 第一个?: true - 最后一个?: false - 偶数行: false - 奇数行: true - ID: 11 - name: 姓名11 - age: 11
- 序号:2 - 第一个?: false - 最后一个?: false - 偶数行: true - 奇数行: false - ID: 12 - name: 姓名12 - age: 12
- 序号:3 - 第一个?: false - 最后一个?: true - 偶数行: false - 奇数行: true - ID: 13 - name: 姓名13 - age: 13
map集合长度是:3
- 序号:1 - key: user1 - ID: 11 - name: 姓名11 - age: 11
- 序号:2 - key: user2 - ID: 12 - name: 姓名12 - age: 12
- 序号:3 - key: user-3 - ID: 12 - name: 姓名12 - age: 12