Thymeleaf系列【5】循环及条件语句
ThymeleafThymeleaf使用th:each标签处理循环。注意事项循环的对象如果是null,不存在则不循环。循环包含自身和标签内全部内容。可以循环的对象数组任何实现 java.util.lterable 接口的对象Enumeration枚举实现Map接口对象语法格式<tr th:each="成员遍历:${表达式}”><td th:text="${成员}”>列<
循环语句
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
- 创建返回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";
}
- 创建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>
- 测试
循环Map
- 创建返回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";
}
- 创建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>
- 测试
条件语句
简单条件:“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)。
案例
- model添加属性
model.addAttribute("a",true);
model.addAttribute("b","");
model.addAttribute("c",null);
model.addAttribute("d",10);
model.addAttribute("e",-2);
- 添加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>
- 测试,可以看到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>
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)