Thymeleaf th:each 循环迭代与 th:if、th:switch 条件判断

SpringBoot系列教材 (三十一)- Thymeleaf - thymeleaf 如何用th:if做条件判断 把你自己做的项目文件夹,和我的可运行项目文件夹进行比较。本知识点是建立在上一个知识点可运行项目的基础上进行的改进,所以最好把上个知识点理解和消化了.String 类型并且值不是 "false", "off", "no", 返回 true。不是 boolean, 数值, 字符, String 的其他类型, 返回 true。的可运行项目,配置运行起来,确认可用之后,再学习做了哪些步骤以达到这样的效果。在确保可运行项目能够正确无误地运行之后,再严格照着教程的步骤,对代码模仿一遍。 阅读详情

th:each 循环迭代

循环基本用法

1、对于信息页面,数据格式是一样时,页面通常都是循环迭代它们,写过 JSP 的 JSTL 的就知道,JSTL 有一个 <c:foreach>,同理 Thymeleaf 也有一个 th:each。作用都是一样的,都是用于遍历数组、List、Set、Map 等数据。

JSP 遍历格式如下:

<c:foreach items ="${lis}" var = "li " begin="2" end ="12">
     ${li}
</c:foreach>

Thymeleaf 遍历格式如下:

<tr th:each="user : ${userList}">
      <td th:text="${user.name}">xxx</td>
</tr>

2、Thymeleaf th:each 遍历格式如下:

<body>
<!--后台控制器输出数据:model.addAttribute("userList", User.getUsers());-->
<!--public static List<User> getUsers(),即数据格式为常见的:List<User>-->
<table border="1">
    <thead>
    <tr>
        <th>工号</th>
        <th>姓名</th>
        <th>生日</th>
        <th>是否已婚</th>
        <th>工资</th>
    </tr>
    </thead>
    <tbody>
    <!-- 遍历集合,如果被遍历的变量 userList 为 null 或者不存在,则不会进行遍历,也不报错-->
    <tr th:each="user : ${userList}">
        <!-- 将用户的主键 uId 存在在 name 属性中-->
        <td th:text="${user.uId}" th:name="${user.uId}"></td>
        <td th:text="${user.uName}"></td>
        <!-- 使用dates对象格式化日期-->
        <td th:text="${#dates.format(user.birthday, 'yyyy-MM-dd HH:mm')}"></td>
        <!-- 三运运算判断是否已婚-->
        <td th:text="${user.isMarry}?'是':'否'"></td>
        <td th:text="${user.price}"></td>
    </tr>
    </tbody>
</table>
</body>
  • 1)th:each="user : ${userList},意味着对于 ${userList} 结果中的每个元素,循环迭代当前模板⽚段,并使⽤名为”user“的变量作为当前迭代元素来填充模版数据。
  • 2)如果被遍历的变量为 null,或者不存在,则直接不会遍历。
  • 3)th:each="user : ${userList} 作用域为自己的整个标签内,包括自己,如上所示为 < tr>。

3、如下所示为遍历下拉框的代码,因为 th:each 的作用域包括自己,所以遍历与取值都在同一个 < option> 标签中:
控制器:

	@RequestMapping("/home")
    public String home(Map<String, Object> paramMap) {
        Station s1 = new Station("NJ");
        Station s2 = new Station("SH");
        Station s3 = new Station("BJ");
        Station s4 = new Station("NY");
        Station s5 = new Station("LSJ");
        List<Station> list = new ArrayList<>();
        list.add(s1);
        list.add(s2);
        list.add(s3);
        list.add(s4);
        list.add(s5);
        paramMap.put("stationList", list);
        paramMap.put("stationName", "SH");
        return "home";
    }

页面:

<form>
    <select id="stationSelect">
        <option>全区</option>
        <!--后台会传值:model.addAttribute("stationList", stationList); 下拉框所有选项的值-->
        <!--后台会传值:model.addAttribute("stationName", stationName); 用户当前选中的下拉框的值-->
        <option th:each="station : ${stationList}" th:text="${station.name}" th:selected="${stationName} eq ${station.name}"></option>
    </select>
</form>

在这里插入图片描述

被迭代变量的值类型

1、java.util.List 类型不是可以在 Thymeleaf 中使⽤迭代的唯⼀值类型,下⾯这些类型的对象都可以通过 th:each 进⾏迭代的:

1)任何实现 java.util.Iterable 接⼝的对象,其值将被迭代器返回,⽽不需要在内存中缓存所有值。
2)任何实现 java.util.Enumeration 接⼝的对象。
3)任何实现 java.util.Map 接⼝的对象, 迭代映射时,iter 变量将是 java.util.Map.Entry 类。
4)任何数组。
5)任何其将被视为包含对象本身的单值列表。

获取迭代状态

迭代过程中,经常会使用到它的一些迭代状态,如:当前迭代的索引,迭代变量中的元素的总数,当前迭代的是奇数还是偶数,当前是否是第一个元素,当前是否是最后一个元素 等等。

在 JSP 的 JSTL 中是 <c:foreach items="${list}" var =“li” varStatus=“status”> 里面的 status 属性。

使⽤ th:each 时,Thymeleaf 提供了⼀种⽤于跟踪迭代状态的机制:状态变量。状态变量在每个 th:each 属性中定义,并包含以下数据:

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

<body>
<!--后台控制器输出数据:model.addAttribute("userList", User.getUsers());-->
<!--public static List<User> getUsers(),即数据格式为常见的:List<User>-->
<table border="1">
    <thead>
    <tr>
        <th>序号</th>
        <th>工号</th>
        <th>姓名</th>
        <th>生日</th>
        <th>是否已婚</th>
        <th>工资</th>
    </tr>
    </thead>
    <tbody>
    <!-- 遍历集合,如果被遍历的变量 userList 为 null 或者不存在,则不会进行遍历,也不报错-->
    <!-- 设置状态变量 loopStatus,逗号分隔,当为奇数行时,设置一个 css2 样式-->
    <tr th:each="user,loopStatus: ${userList}" th:class="${loopStatus.odd}?'css2'">
        <!-- 显示当前的行序号-->
        <td th:text="${loopStatus.count}"></td>
        <!-- 将用户的主键 uId 存在在 name 属性中-->
        <td th:text="${user.uId}" th:name="${user.uId}"></td>
        <td th:text="${user.uName}"></td>
        <!-- 使用dates对象格式化日期-->
        <td th:text="${#dates.format(user.birthday, 'yyyy-MM-dd HH:mm')}"></td>
        <!-- 三运运算判断是否已婚-->
        <td th:text="${user.isMarry}?'是':'否'"></td>
        <td th:text="${user.price}"></td>
    </tr>
    </tbody>
</table>

在这里插入图片描述
迭代状态变量(本示例中的 loopStatus )在 th:each 属性中通过在变量 user 之后直接写其名称来定义,⽤逗号分隔。 与 iter 变量⼀样,状态变量的作⽤范围也是 th:each 属性的标签定义的代码⽚段中。

如果没有显式地设置状态变量,则 Thymeleaf 将始终创建⼀个默认的迭代变量,该状态迭代变量名称为:迭代变量+“Stat”。

    <tbody>
    <!-- 遍历集合,如果被遍历的变量 userList 为 null 或者不存在,则不会进行遍历,也不报错-->
    <!-- 没有显示设置状态变量时,Thymeleaf 默认创建一个 userStat 状态变量,直接使用即可-->
    <tr th:each="user:${userList}" th:class="${userStat.odd}?'css2'">
        <!-- 显示当前的行序号-->
        <td th:text="${userStat.count}"></td>
        <!-- 将用户的主键 uId 存在在 name 属性中-->
        <td th:text="${user.uId}" th:name="${user.uId}"></td>
        <td th:text="${user.uName}"></td>
        <!-- 使用dates对象格式化日期-->
        <td th:text="${#dates.format(user.birthday, 'yyyy-MM-dd HH:mm')}"></td>
        <!-- 三运运算判断是否已婚-->
        <td th:text="${user.isMarry}?'是':'否'"></td>
        <td th:text="${user.price}"></td>
    </tr>
    </tbody>

条件判断

th:if

很多时候只有在满⾜某个条件时,才将⼀个模板⽚段显示在结果中,否则不进行显示。比如只有当用户有订单时,才为它显示订单链接,否则不显示。th:if 属性用于满足这个需求:

<body>
<!--if属性结果为 true,模板会进行显示-->
<p th:if="true">th:if="true"</p>
<!--if属性结果为 false,模板不会进行显示-->
<p th:if="false">th:if="false"</p>
 
<!--后台控制器传出数据:model.addAttribute("isMarry", true);-->
<p th:if="${isMarry}">已婚</p>
</body>

在这里插入图片描述
th:if 属性不仅只以布尔值作为判断条件,它将按照如下规则判定指定的表达式结果为 true:

1)如果表达式结果为布尔值,则为 true 或者 false
2)如果表达式的值为 null,th:if 将判定此表达式为 false
3)如果值是数字,为 0 时,判断为 false;不为零时,判定为 true
4)如果 value 是 String,值为 “false”、“off”、“no” 时,判定为 false,否则判断为 true,字符串为空时,也判断为 true
5)如果值不是布尔值,数字,字符或字符串的其它对象,只要不为 null,则判断为 true

<body>
<!--表达式的结果为布尔类型时,if 直接以它为结果-->
<p th:if="true">th:if="true"</p>
<!--当表达式结果为null时,则if判定为false-->
<p th:if="null">th:if="null"</p>
<!--表达式为数字时,不为0,if判定为true,为0,时,if判定为false-->
<p th:if="11">th:if="11"</p>
<p th:if="0">th:if="0"</p>
 
<!--表达式结果为字符串时,如果为 true,则if判定为true;值为 false,则if判定为false-->
<!--结果为 off、no 等特殊字符串时,if 判定为false-->
<p th:if="'true'">th:if="'true'"</p>
<p th:if="'false'">th:if="'false'"</p>
<p th:if="'off'">th:if="'off'"</p>
<p th:if="'no'">th:if="'no'"</p>
<!--表达式结果字符串不为false,off,no时,if判定为true-->
<p th:if="'Love China'">th:if="'Love China'"</p>
 
<!--后台传输:model.addAttribute("userList", User.getUsers());-->
<!--只要 userList 不等于null,则if判定为true,否则为false-->
<p th:if="${userList}">th:if="${userList}"</p>
 
<!--后台传输:model.addAttribute("name", "");-->
<!--字符串为空时,if判定为 true-->
<p th:if="${name}eq''">name 等于空</p>
<p th:if="${name}">th:if="${name}"</p>
</body>

在这里插入图片描述

th:unless

th:unless 是 th:if 的反向属性,它们判断的规则一致,只是 if 当结果为true 时进行显示,unless 当结果为 false进行显示。

<body>
<!--unless与if判定规则一致,但是显示条件相反,unless当结果为false时才进行显示-->
<p th:unless="false">th:unless="false"</p>
<p th:unless="true">th:unless="true"</p>
 
<!--后台传输:model.addAttribute("isMarry", true);-->
<p th:if="${isMarry}">已婚1</p>
<p th:unless="!${isMarry}">已婚2</p>
</body>

在这里插入图片描述

th:switch

th:switch / th:case 与 Java 中的 switch 语句等效,有条件地显示匹配的内容。

只要其中⼀个 th:case 的值为 true,则同⼀个 switch 语句中的其他 th:case 属性都将被视为 false。当有多个 case 的值为 true 时,则只取第一个。

switch 语句的 default 选项指定为 th:case =“*”,即当没有 case 的值为 true 时,将显示default 的内容,如果有多个 default ,则只取第一个。

<body>
<!--数字类型,匹配其中第一个 case 后,其它的 case 都将视为 false-->
<div th:switch="1">
    <p th:case="0">管理员</p>
    <p th:case="1">操作员</p>
    <p th:case="*">未知用户</p>
</div>
 
<!--数字类型:当没有 case 匹配时,取默认值,当有多个匹配,只取第一个-->
<div th:switch="-1">
    <p th:case="0">管理员</p>
    <p th:case="*">操作员</p>
    <p th:case="*">未知用户</p>
</div>
 
<!--布尔类型,多个case满足时,只取第一个-->
<div th:switch="true">
    <p th:case="true">已婚</p>
    <p th:case="true">已成年</p>
    <p th:case="false">未婚</p>
</div>
 
<!--字符串类型-->
<div th:switch="'For China'">
    <p th:case="'For USA'">美国</p>
    <p th:case="'For UK'">英国</p>
    <p th:case="'For China'">中国</p>
    <p th:case="*">未知国籍</p>
</div>
</body>

在这里插入图片描述

SpringBoot系列教材 (三十二)- Thymeleaf - thymeleaf 如何用th:each 做条件遍历 把你自己做的项目文件夹,和我的可运行项目文件夹进行比较。本知识点是建立在上一个知识点可运行项目的基础上进行的改进,所以最好把上个知识点理解和消化了.even/odd 属性, boolean 类型的, 用来判断是否是偶数个还是奇数个。的可运行项目,配置运行起来,确认可用之后,再学习做了哪些步骤以达到这样的效果。在确保可运行项目能够正确无误地运行之后,再严格照着教程的步骤,对代码模仿一遍。( 可运行项目 ) 和自己的代码,来定位问题所在。,可以较为明显地提升学习速度,跨过学习路上的各个槛。 阅读详情

相关推荐

spring boot结合thymeleaf通过后台传入的数值循环生成标签

输入:一个数字 输出:根据数字大小循环生成固定的一个标签,标签个数有由数字大小决定 使用thymeleaf的内置函数了:#numbers.sequence 这个方法就是根据传入的参数生成一个数列,类似于java的for循环一样,支持两个参数和三个参数的 参数一:起始值(包含) 参数二:终点值(包含) 参数三:步长举个栗子~ java代码传入一个length参数model.addAttr

浮闲 6146

Thymeleaf模板引擎常用属性之 th:each迭代循环

thymeleaf模板引擎常用属性之 th:each迭代循环。

liubin5620的博客 7万+

UFS逻辑单元管理

介绍UFS 逻辑单元管理和配置

m0_51720747的博客 1950

关于thymeleaf模板引擎中th:if的使用

1)如果表达式结果为布尔值,则为 true 或者 false 2)如果表达式的值为 null,th:if 将判定此表达式为 false 3)如果值是数字,为 0 时,判断为 false;不为零时,判定为 true 4)如果 value 是 String,值为 “false”、“off”、“no” 时,判定为 false,否则判断为 true,字符串为空时,也判断为 true 5)如果值不是布尔值,数字,字符或字符串的其它对象,只要不为 null,则判断为 true

桐花思雨 4万+

告别密码!用VScode+SSH一键连接树莓派,再也不用每次输密码了

本文详细介绍了如何通过VScode和SSH密钥实现树莓派的免密连接,告别繁琐的密码输入。从开发环境准备、SSH密钥生成与配置,到VScode远程连接优化和常见问题排查,提供了一套完整的解决方案,帮助开发者提升工作效率。

weixin_28831341的博客 173

从零配置ORB-SLAM3:TUM-VI数据集yaml文件参数调优指南

本文深入解析了ORB-SLAM3在TUM-VI数据集上的yaml配置文件参数调优方法。针对双目惯性模式,详细拆解了相机标定、IMU噪声模型和ORB特征提取三大模块的关键参数,解释了其原理与影响,并通过实战案例展示了如何通过调整特征点数量、FAST阈值及IMU噪声参数,有效提升系统在低纹理环境下的鲁棒性和轨迹精度。

weixin_29071809的博客 152

4)Thymeleaf th:each 循环迭代与 th:if、th:switch 条件判断

目录 th:each 循环迭代 循环基本用法 获取迭代状态 条件判断 th:if th:unless th:switch th:each 循环迭代 循环基本用法 1、对于信息页面,数据格式是一样时,页面通常都是循环迭代它们,写过 JSP 的 JSTL 的就知道,JSTL 有一个<c:foreach>,同理 Thymeleaf 也有一个 th:each。作用都是一...

蚩尤后裔-汪茂雄 10万+

ChatUI vs Ant Design X 技术选型对比

维度ChatUI优势轻量级、易上手、完美兼容 Ant Design全能型框架、企业级扩展性、深度模型集成局限性功能单一、缺乏高级交互支持学习曲线陡峭、包体积较大最佳实践单独聊天窗口集成整体智能助手系统开发通过对比可见,ChatUI 适合快速实现基础对话功能,而Ant Design X 更适合构建复杂的 AI 驱动应用。实际选择时需结合项目规模、团队技术栈和对交互复杂度的需求综合评估。

四楼没电梯的专栏 2266

浅谈Thymeleaf

Thymeleaf 模板引擎具有以下特点: 不想开启内联表达式,可以使用关闭 想要开启的话使用,默认情况下就是text在JS中使用内联,需要开启 表达式基本对象 }不足三位,前面补0 常用属性 渲染拼接 object对象的使用 if属性 switch属性 each循环迭代 这次写项目要求使用Thymeleaf,所以就总结一下自己学到的一些知识。😥😓😭😊

L19541216的博客 285

OpenClaw + Antigravity + 飞书完整部署教程

在 Linux 服务器上部署 OpenClaw,使用 Antigravity 本地代理 AI 模型,并接入飞书实现 24 小时在线 AI 助手。

Maynor的博客 1788

rk628d修改默认分辨率

在rk3568上使用628d hdmi转mipi,在628d已经调试好的情况下,客户新增需求:视频输入这边的推荐分辨率固定在1024x768。

m0_60805802的博客 2055

(七)Thymeleaf的 th:* 属性之—— th: ->设值& 遍历迭代& 条件判断

3.4 属性值的设置 3.4.1 使用th:attr来设置属性的值 &lt;form action="subscribe.html" th:attr="action=@{/subscribe}"&gt; &lt;fieldset&gt; &lt;input type="text" name="email" /&gt; &lt;input

weixin_33953384的博客 1110

windsurf中出现无法Connecting to server的解决方案

本文主要介绍了windsurf中出现无法Connecting to server的解决方案,希望能对使用windsurf的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 6万+

(七)Thymeleaf的 th:* 属性之—— th: ->设值& 遍历迭代& 条件判断

转载自:https://www.cnblogs.com/zjfjava/p/6893607.html 3.4 属性值的设置 3.4.1 使用th:attr来设置属性的值   &lt;form action="subscribe.html" th:attr="action=@{/subscribe}"&gt; &lt;fieldset&gt; &lt;input type="t...

guying4875的专栏 1万+

【WRF数据准备】海温(SST)数据替换

【WRF数据准备】海温(SST)数据替换

WW、forever的博客 1119

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

thymeleaf模板使用

thymeleaf 遍历 <table> <tr> <th>NAME</th> <th>PRICE</th> <th>IN STOCK</th> </tr> <tr th:each="prod : ${prods}" th:class="${prod...

qq_36374082的博客 364

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Thymeleaf th:each遍历,th:if、th:switch 条件判断,input,select,radio 回显赋值

1. th:each 遍历 <!-- 遍历集合,如果被遍历的变量 userList 为 null 或者不存在,则不会进行遍历,也不报错--> <tr th:each="user : ${userList}"> <!-- 将用户的主键 uId 存在在 name 属性中--> <td th:text="${user.u...

上班搞IT,下班搞ITF。 4907

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Thymeleaf系列五 迭代,if,switch语法

1. 概述这里介绍thymeleaf的编程语法,本节主要包括如下内容 迭代语法:th:each; iteration status 条件语法:th:if; th:unless switch语法:th:switch; th:case; *

不积跬步无以至千里; 不积小流无以成江海 4万+

Thymeleaf 条件判断、迭代遍历

条件判断 th:if 进行判断处理 举个例子: <p th:if="${user.getAge()} == '男'"> 性别:男 </p> 这里使用的是 ModelAndView 传递的 user 对象 th:switch 配合 th:case 用来分流处理 举个例子: <div th:switch="${user.getAge()}"> &...

cheng_cuo_tuo的博客 1073

Thymeleaf (三) ---------Thymeleaf 属性

目录一、th:action 属性二、th:method 属性三、th:href 属性四、th:src 属性五、th:text 属性六、th:style 属性七、th:each 属性1、循环列表2、遍历数组 Array 大部分属性和 html 的一样,只不过前面加了一个 th 前缀。 加了 th 前缀的属性,是经过模版引擎处理的 一、th:action 属性 定义后台控制器的路径,类似标签的 action 属性,主要结合 URL 表达式,获取动态变量 <form id="login" th:actio

在森林里麋了鹿 6742

Thymeleaf

Thymeleaf 是一个 XML/XHTML/HTML5 **模板引擎**,可用于 Web 与非 Web 环境中的应用开发。它是一个开源的 Java 库,基于 Apache License 2.0 许可,由 Daniel Fernández 创建。

阿莫夕林的博客 1522

thymeleaf中遇到的坑

th:href <a th:href="@{'/pageController?pageNum='+${pageNum}}" th:text="${pageNum}"></a> 格式:th:href="@{‘字符串’+${model中的nam值}}"。 controller取值 @RequestMapping(value = "/pageController",method...

qq_42535651的博客 1786

Thymeleaf的常见属性

注:如果不需要取动态值,可直接使用html标签,当然也可以使用Thymeleaf的标签;当需要动态取值时,则需要使用Thymeleaf标签。如: &lt;form id="login" th:action="'@{/boot/login/}id='+${user.id}"&gt;&lt;!--url以开头斜杠开头,编译时会把上下文路径自动补全在url最前面--&gt;&gt; ... &lt;/...

qq_42765068的博客 1563

Thymeleaf的 th:* 属性之—— th: ->text& utext& href

th:*使用原因: for the sake of simplicity and compactness of the code samples(简化代码) the th:*notation is more general and allowed in every Thymeleaf template mode (XML, TEXT…)(th:*在多个模板模式里更为通用且允许) 常用th...

Kevinvcc200的博客 7129
上一篇: Thymeleaf th:* 设置/修改属性值详解
下一篇: Thymeleaf 模板布局 th:fragment、th:replace、th:insert、th:remove
yyangqqian
博客等级 码龄15年 406粉丝 406原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值