1.写在前面
这个属性非常常用,比如从后台传来一个对象集合那么就可以使用此属性遍历输出,它与JSTL 中的<c: forEach>类似,此属性既可以循环遍历集合,也可以循环遍历数组及 Map 。
2.应用举例
2.1 遍历数组
首先,我们准备一个 model 类。
这里使用了 lombok 下的一个注解 @Data,它可以帮助我们自动生成 get/set 方法、toString()等。但是我们在这个类中是看不到的,查看的方法是:点击这个类,然后按 Alt + 7,即可查看。
package com.songzihao.springboot.model;
import lombok.Data;
/**
*
*/
@Data
public class User {
private Integer id;
private String name;
private String phone;
private String address;
}
之后,我们写一个控制层,其中有一个请求方法。
package com.songzihao.springboot.controller;
import com.songzihao.springboot.model.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
*
*/
@Controller
public class UserController {
@RequestMapping(value = "/each/array")
public String eachArray(Model model) {
User[] userArray = new User[10];
for (int i = 0; i < 10; i++) {
User user = new User();
user.setId(i);
user.setName("宋小" + i);
user.setPhone("1853790565" + i);
user.setAddress("洛阳市涧西区XX路" + i + "号");
userArray[i] = user;
}
model.addAttribute("userArray",userArray);
return "eachArray";
}
}
然后是这个请求方法对应的html页面。
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>循环遍历Array数组</title>
</head>
<body>
<div th:each="user,userStat:${userArray}">
<span th:text="${userStat.index}"></span>
<span th:text="${user.id}"></span>
<span th:text="${user.name}"></span>
<span th:text="${user.phone}"></span>
<span th:text="${user.address}"></span>
</div>
</body>
</html>
最后在核心配置文件中添加以下内容,启动入口类,测试。
#关闭Thymeleaf页面的缓存开关
spring.thymeleaf.cache=false
#thymeleaf 模版前缀,默认值,可选项
spring.thymeleaf.prefix=classpath:/templates/
#thymeleaf 模版后缀,默认值,可选项
spring.thymeleaf.suffix=.html
package com.songzihao.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
2.2 遍历List
model 里面的User类、核心配置文件、项目启动入口类和上面的例子是一样的 ,这里就不再给出代码了。
下面直接给出控制层中对应的方法和对应的html页面。
package com.songzihao.springboot.controller;
import com.songzihao.springboot.model.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
*
*/
@Controller
public class UserController {
@RequestMapping(value = "/each/list")
public String userList(Model model) {
List<User> userList=new ArrayList<>();
for (int i=0;i<10;i++) {
User user=new User();
user.setId(1000 + i);
user.setName("宋小" + i);
user.setPhone("1364388173" + i);
user.setAddress("郑州市金水区XX路" + i + "号");
userList.add(user);
}
model.addAttribute("userList",userList);
return "eachList";
}
}
th:each="user, userStat : ${userList}" 中的 ${userList} 是后台传过来的集合
◼ user:定义变量,去接收遍历${userList}集合中的一个数据
◼ userStat:${userList} 循环体的信息
◼ 其中 user 及 userStat 自己可以随便取名
◼ userStat 是循环体的信息,通过该变量可以获取如下信息index: 当前迭代对象的 index (从 0 开始计算)
count: 当前迭代对象的个数(从 1 开始计算) 这两个用的较多
size: 被迭代对象的大小
current: 当前迭代变量
even/odd: 布尔值,当前循环是否是偶数/奇数(从 0 开始计算)
first: 布尔值,当前循环是否是第一个
last: 布尔值,当前循环是否是最后一个
息 注意:循环体信息 userStat 也可以不定义,则默认采用迭代变量加上 Stat 后缀,即 userStat
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>循环遍历List集合</title>
</head>
<body>
<!--
user:定义变量,去接收遍历${userList}集合中的每一个数据
userStat:当前循环的对象状态的变量(可以不写), ${userList} 循环体的信息
userList:当前循环的集合
-->
<div th:each="user,userStat:${userList}">
<span th:text="${userStat.index}"></span>
<span th:text="${user.id}"></span>
<span th:text="${user.name}"></span>
<span th:text="${user.phone}"></span>
<span th:text="${user.address}"></span>
</div>
</body>
</html>
2.3 遍历Map
model 里面的User类、核心配置文件、项目启动入口类和上面的例子是一样的 ,这里就不再给出代码了。
下面直接给出控制层中对应的方法和对应的html页面。
package com.songzihao.springboot.controller;
import com.songzihao.springboot.model.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
*
*/
@Controller
public class UserController {
@RequestMapping(value = "/each/map")
public String eachMap(Model model) {
Map<Integer,Object> userMaps = new HashMap<Integer, Object>();
for (int i = 0; i < 10; i++) {
User user = new User();
user.setId(1000 + i);
user.setName("宋小" + i);
user.setPhone("1310179264" + i);
user.setAddress("洛阳市涧西区XX路" + i + "号");
userMaps.put(i,user);
}
model.addAttribute("userMaps",userMaps);
return "eachMap";
}
}
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>循环遍历Map集合</title>
</head>
<body>
<div th:each="user,userStat:${userMaps}">
<span th:text="${userStat.count}"></span>
<span th:text="${user.key}"></span>
<span th:text="${user.value}"></span>
<span th:text="${user.value.id}"></span>
<span th:text="${user.value.name}"></span>
<span th:text="${user.value.phone}"></span>
<span th:text="${user.value.address}"></span>
</div>
</body>
</html>
最后说一下,可能这三个例子中遍历出来的结果,不太好看😂😂😂,但是这里纯粹是为了学习Thymeleaf这个模板引擎中的内容,所以没有过多的考虑这个问题,希望大家谅解!!!