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;

}

SpringBoot——Thymeleaf中使用th:each遍历数组、List、Map_spring

之后,我们写一个控制层,其中有一个请求方法。

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);
    }

}

SpringBoot——Thymeleaf中使用th:each遍历数组、List、Map_List_02


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>

SpringBoot——Thymeleaf中使用th:each遍历数组、List、Map_List_03


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>

SpringBoot——Thymeleaf中使用th:each遍历数组、List、Map_List_04

最后说一下,可能这三个例子中遍历出来的结果,不太好看😂😂😂,但是这里纯粹是为了学习Thymeleaf这个模板引擎中的内容,所以没有过多的考虑这个问题,希望大家谅解!!!