SpringBoot(十六) Thymeleaf模板引擎 - 内置对象

Thymeleaf中的包含许多内置对象,例如 list解析、日期格式化、数字格式化等

构建项目

控制层

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
* @author Ray
* @date 2018/8/1 0001
*/
@Controller
@RequestMapping(value = "/test03")
public class TestController03 {

@GetMapping(value = "/")
public String index(Model model, HttpServletRequest request){
List<String> datas = new ArrayList<>();
datas.add("Ray");
datas.add("https://qq343509740.gitee.io/");
datas.add("343509740");
model.addAttribute("datas", datas);
model.addAttribute("curDate", new Date());

model.addAttribute("money", Math.random()*100);
return "test03";
}
}

在这个控制器的Model中存放了这样几个数据:一个String类型的列表、一个日期对象和一个数值,这些东西在实际应用开发过程中应用非常广泛,下面具体看一下在Thymeleaf中是如何解析这些数据的。

注意

需要注意的是:

  1. 内置对象一般都以s结尾,如dateslistsnumbers
  2. 在使用内置对象是在对象名前都需要加#号。

日期格式化

1
2
3
4
5
6
7
8
9
10
11
12
13
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Thymeleaf-3</title>
</head>
<body>

<h1>日期格式化</h1>
<span th:text="${#dates.format(curDate, 'yyyy-MM-dd HH:mm:ss')}"></span>

</body>
</html>

输出结果

说明

使用内置对象datesformat函数即可对日期进行格式化,在format函数中,第一个参数是日期对象,对二两个参数为日期格式(规则跟SimpleDateFormat一样)

数字格式化

示例一

1
2
3
4
5
6
7
8
9
10
11
12
13
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Thymeleaf-3</title>
</head>
<body>

<h1>数字格式化-1</h1>
<span th:text="${#numbers.formatDecimal(money, 0, 2)}"></span>

</body>
</html>

输出结果

说明

此示例表示保留两位小数位,整数位自动

示例二

1
2
3
4
5
6
7
8
9
10
11
12
13
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Thymeleaf-3</title>
</head>
<body>

<h1>数字格式化-2</h1>
<span th:text="${#numbers.formatDecimal(money, 3, 2)}"></span>

</body>
</html>

输出结果

说明

此示例表示保留两位小数位,3位整数位(不够的前加0)

获取列表长度

1
2
3
4
5
6
7
8
9
10
11
12
13
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Thymeleaf-3</title>
</head>
<body>

<h1>获取列表长度</h1>
<span th:text="${#lists.size(datas)}"></span>

</body>
</html>

输出结果

说明

使用#lists.size来获取List的长度

获取URL参数值

1
2
3
4
5
6
7
8
9
10
11
12
13
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Thymeleaf-3</title>
</head>
<body>

<h1>获取URL参数值</h1>
<span th:text="${#httpServletRequest.getParameter('page')}"></span>

</body>
</html>

输出结果

说明

当访问http://localhost:8080/test03/?page=5时页面将会得到page对应的值:5。

定义变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Thymeleaf-3</title>
</head>
<body>

<h1>定义变量</h1>
<div th:with="curPage=${#httpServletRequest.getParameter('page')}">
<h3>当前页码: <span th:text="${curPage}"></span> </h3>
</div>

</body>
</html>

输出结果

说明

当访问http://localhost:8080/test03/?page=5时,页面将显示:当前页码:5,说明用`th:with`来定义变量,多个用,号隔开,使用范围在当前标签内。

完整HTML

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Thymeleaf-3</title>
</head>
<body>
<h1>datas 集合数据</h1>
集合数据:<span th:text="${datas}"></span>

<hr>

<h1>日期格式化</h1>
当前时间:<span th:text="${#dates.format(curDate, 'yyyy-MM-dd HH:mm:ss')}"></span>

<hr>

<h1>数字格式化-1</h1>
随机金额:<span th:text="${#numbers.formatDecimal(money, 0, 2)}"></span>

<hr>

<h1>数字格式化-2</h1>
随机金额:<span th:text="${#numbers.formatDecimal(money, 3, 2)}"></span>

<hr>

<h1>获取列表长度</h1>
数据长度:<span th:text="${#lists.size(datas)}"></span>

<hr>

<h1>获取URL参数值</h1>
URL参数:<span th:text="${#httpServletRequest.getParameter('page')}"></span>

<hr>

<h1>获取URL参数值</h1>
URL参数:<span th:text="${#httpServletRequest.getParameter('page')}"></span>

<hr>

<h1>定义变量</h1>
<div th:with="curPage=${#httpServletRequest.getParameter('page')}">
<h3>当前页码: <span th:text="${curPage}"></span> </h3>
</div>


</body>
</html>

内置对象说明

上面简单描述了比较常用的dateslistsnumbers这几个内置对象,在Thymeleaf还有很多的内置对象,像strings也非常常用,用法跟java.lang.String类的用法一样。

内置对象 说明
#dates 日期格式化内置对象,具体方法可以参照java.util.Date
#calendars 类似于#dates,但是是java.util.Calendar类的方法
#numbers 数字格式化
#strings 字符串格式化,具体方法可以参照java.lang.String,如startsWith、contains等
#objects 参照java.lang.Object
#bools 判断boolean类型的工具
#arrays arrays数组操作的工具
#lists List操作的工具,参照java.util.List
#sets Set操作工具,参照java.util.Set
#maps Map操作工具,参照java.util.Map
#aggregates 操作数组或集合的工具
#messages 操作消息的工具
#ids 处理可能重复id属性(例如,由于迭代)的工具
-------------- 本文结束  感谢您的阅读 --------------