循环语句

Thymeleaf使用th:each标签处理循环。

注意事项

  • 循环的对象如果是null或不存在则不循环。
  • 循环包含自身和标签内全部内容。

可以循环的对象

  • 数组
  • 任何实现 java.util.lterable 接口的对象
  • Enumeration枚举
  • 实现Map接口对象

语法格式

<tr th:each="循环成员名:${获取循环对象}”>
	<td th:text="${成员}”>列</td>
</tr>

使用th:each 时,Thymeleaf提供了一种用于跟踪迭代状态的机制:状态变量。

状态变量在每个th:each属性中定义,并包含以下数据:

  • index属性: 当前迭代索引,从0开始
  • count属性:当前的迭代计数,从1开始
  • size属性:迭代变量中元素的总量
  • current 属性:每次迭代的 iter变量,即当前遍历到的元素
  • even/odd布尔属性:当前的迭代是偶数还是奇数。
  • first布尔属性:当前的迭代是否是第一个迭代
  • last布尔属性:当前的迭代是否是最后一个迭代。

案例演示

循环List
  1. 创建返回List集合接口
    @GetMapping("/list")
    public String list(Model model) {
        List<User> list=new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            Role role = Role.builder().roleId(1234L+i).roleName("管理员"+i).build();
            User user = User.builder().role(role).age(18+i).birthday(new Date()).email("1113@163.com").money(11.99D).username("张三"+i).build();
            list.add(user);
        }
        model.addAttribute("list", list);
        return "list";
    }
  1. 创建list.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>for</title>
</head>
<body>
    <h1>循环list</h1>
    <table>
        <thead>
            <tr>
                <td>序号</td>
                <td>姓名</td>
                <td>年纪</td>
                <td>生日</td>
                <td>邮箱</td>
                <td>角色名</td>
            </tr>
            <!--循环用户-->
            <tr data-th-each="users:${list}">
                <td th:text="${usersStat.index}">序号</td>
                <td th:text="${users.username}">姓名</td>
                <td th:text="${users.age}">年纪</td>
                <td th:text="${users.birthday}"> 生日</td>
                <td th:text="${users.email}">邮箱</td>
                <td th:text="${users.role.roleName}">角色名</td>
            </tr>
        </thead>
    </table>
</body>
</html>
  1. 测试
    在这里插入图片描述
循环Map
  1. 创建返回Map集合接口
    @GetMapping("/map")
    public String map(Model model) {
        Map<String, Object> map = new HashMap<>();
        map.put("name","韩梅梅");
        map.put("age",100);
        map.put("sex","雌雄同体");
        map.put("class","三年二班");
        map.put("是否在世",true);
        map.put("账户余额",99999.99F);
        model.addAttribute("map", map);
        return "map";
    }
  1. 创建map.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>for</title>
</head>
<body>
<h1>循环map</h1>
    <p th:each="map:${map}">
        <span th:text="${map.key}"></span>
        <span th:text="${map.value}"></span>
    </p>
</table>
</body>
</html>
  1. 测试
    在这里插入图片描述

条件语句

简单条件:“if”和“unless”

简介说明

th:if 当条件满足时,显示代码片段。

条件常用boolean表示,true满足,反之不满足。

th:unless是不满足条件显示代码片段,类似java中if 的else部分。

thymeleaf中 ,true不是唯一满足条件:

  • 如果值不为空:
    • 如果 value 是一个布尔值并且是true.
    • 如果 value 是一个数字并且非零
    • 如果 value 是一个字符且非零
    • 如果 value 是 String 并且不是“false”、“off”或“no”
    • 如果 value 不是布尔值、数字、字符或字符串。
  • (如果值为 null,则 th:if 将评估为 false)。
案例
  1. model添加属性
        model.addAttribute("a",true);
        model.addAttribute("b","");
        model.addAttribute("c",null);
        model.addAttribute("d",10);
        model.addAttribute("e",-2);
  1. 添加html
    <p th:if="${a}"><span>a true</span></p>
    <p th:if="${b}"><span>b ""</span></p>
    <p th:if="${c}"><span>c null</span></p>
    <p th:if="${d}"><span>d 10</span></p>
    <p th:if="${e}"><span>e -2</span></p>
    <p th:if="0"><span>000</span></p>
	<p th:unless="0"><span>unless 000</span></p>
    <p th:unless="null"><span>unless null</span></p>
    <p th:unless="${c}"><span>unless ccc</span></p>
  1. 测试,可以看到c和000项都没有显示,说明为null和0时,都为fasle。
    在这里插入图片描述

swtich语句

还有一种方法可以使用Java 中等效的switch结构来有条件地显示内容:th:switch/th:case属性。

请注意,一旦一个th:case属性被评估为true,th:case同一切换上下文中的所有其他属性都被评估为false,case都不复合式默认选项指定为th:case="*"。

以下代码表示,对角色名进行判断,当roleName和case值一样时,则输出对应标签的值,如果都不匹配则输出case="*"标签中内容。

    <div th:switch="${user.role.roleName}">
        <p th:case="'管理员'">User is 管理员</p>
        <p th:case="'用户'">User is a 用户</p>
        <p th:case="*">User is some other thing</p>
    </div>
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐