1. Thymeleaf 基本对象 115-117
模板引擎提供了一组内置的对象,这些内置的对象可以直接在模板中使用,这些对象由#
号开始引用,我们比较常用的内置对象
1.2 #request 表示 HttpServletRequest
1.3 #session 表示 HttpSession 对象
1.4 session 对象,表示 HttpSession 对象
文档地址:https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#web-context-namespaces-for-requestsession-attributes-etc.
1.2和1.3和1.4 代码如下
session 表示Map对象的, 是#session的简单表示方式, 用来获取session中指定的key的值
#session.getAttribute("loginname") == session.loginname
这些是内置对象,可以在模板文件中直接使用。
//模板内置对象 115
@GetMapping("/baseObject")
public String baseObject(Model model, HttpServletRequest request,
HttpSession session){
//添加数据
model.addAttribute("myname","李思");
//添加到request域
request.setAttribute("requestData","request作用域中的数据");
//添加到session域中
request.getSession().setAttribute("sessionData","session作用域中的数据");
//直接使用session添加
session.setAttribute("loginname","zhangsan");
return "baseObject";
}
baseObject.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>模板内置对象,方便使用request,session 115</title>
</head>
<body>
<div style="margin-left: 350px">
<h3>内置对象#request,#session,session的使用</h3>
<p>获取作用域中的数据</p>
<p th:text="${#request.getAttribute('requestData')}"></p>
<p th:text="${#session.getAttribute('sessionData')}"></p>
<p th:text="${session.loginname}"></p>
<br/>
<br/>
<h3>使用内置对象的方法 116</h3>
getRequestURL=<span th:text="${#request.getRequestURL()}"></span><br/>
getRequestURI=<span th:text="${#request.getRequestURI()}"></span><br/>
getQueryString=<span th:text="${#request.getQueryString()}"></span><br/>
getContextPath=<span th:text="${#request.getContextPath()}"></span><br/>
getServerName=<span th:text="${#request.getServerName()}"></span><br/>
getServerPort=<span th:text="${#request.getServerPort()}"></span><br/>
sessionId,getId=<span th:text="${#session.getId()}"></span>
</div>
</body>
</html>
1.5 获取参数 118
baseObject.html
<h3>param对象:表示请求的参数集合</h3>
name参数的值:<span th:text="${param.name}"></span><br/>
参数的数量:<span th:text="${param.size()}"></span><br/>
在浏览器输入
http://localhost:9001/myboot/tpl/baseObject?name=lisi&age=20
2. 内置工具类对象 119-123
模板引擎提供的一组功能性内置对象,可以在模板中直接使用这些对象提供的功能方法工作中常使用的数据类型,如集合,时间,数值,可以使用 Thymeleaf 的提供的功能性对象来处理它们内置功能对象前都需要加#号,内置对象一般都以 s 结尾
官方手册:http://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html
#dates: java.util.Date 对象的实用方法,
#calendars: 和 dates 类似, 但是 java.util.Calendar 对象;
#numbers: 格式化数字对象的实用方法;
#strings: 字符串对象的实用方法: contains, startsWith, prepending/appending 等;
#objects: 对 objects 操作的实用方法;
#bools: 对布尔值求值的实用方法;
#arrays: 数组的实用方法;
#lists: list 的实用方法,比如
#sets: set 的实用方法;
#maps: map 的实用方法;
#aggregates: 对数组或集合创建聚合的实用方法
Cat
package com.bjpowernode.vo;
//实体类 119
public class Cat {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Cat{" +
"name='" + name + '\'' +
'}';
}
}
Dog
package com.bjpowernode.vo;
//实体类 119
public class Dog {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Dog{" +
"name='" + name + '\'' +
'}';
}
}
Zoo
package com.bjpowernode.vo;
//实体类 119
public class Zoo {
private Cat cat;
private Dog dog;
public Cat getCat() {
return cat;
}
public void setCat(Cat cat) {
this.cat = cat;
}
public Dog getDog() {
return dog;
}
public void setDog(Dog dog) {
this.dog = dog;
}
@Override
public String toString() {
return "Zoo{" +
"cat=" + cat +
", dog=" + dog +
'}';
}
}
2.1 演示 119-123
演示
#dates: 处理日器的工具类
#numbers:处理数字的
#lists: 处理list集合的
//内置的工具类对象 119
@GetMapping("/utilobject")
public String utilObject(Model model){
model.addAttribute("mydate",new Date());
model.addAttribute("mynum",26.695);
model.addAttribute("mystr","bjpowernode");
List<String> list = Arrays.asList("a","b","c");
model.addAttribute("mylist",list);
//创建Zoo对象 123
Zoo zoo = new Zoo();
Cat cat = new Cat();
cat.setName("短腿");
Dog dog = new Dog();
dog.setName("二哈");
zoo.setCat(cat);
//zoo.setDog(dog); zoo.dog = null
model.addAttribute("zoo",zoo);
return "utilObject";
}
utilObject.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>内置工具类对象 119</title>
</head>
<body>
<div style="margin-left: 350px">
<h3>日期类对象 #dates</h3>
<p th:text="${#dates.format(mydate)}"></p>
<p th:text="${#dates.format(mydate,'yyyy-MM-dd')}"></p>
<p th:text="${#dates.format(mydate,'yyyy-MM-dd HH:mm:ss')}"></p>
<p th:text="${#dates.year(mydate)}"></p>
<p th:text="${#dates.month(mydate)}"></p>
<p th:text="${#dates.monthName(mydate)}"></p>
<p th:text="${#dates.createNow()}"></p>
<br/>
<h3>内置工具类#numbers,操作数字的 120</h3>
<p th:text="${#numbers.formatCurrency(mynum)}"></p>
<p th:text="${#numbers.formatDecimal(mynum,5,2)}"></p>
<br/>
<h3>内置工具类#strings,操作字符串 121</h3>
<p th:text="${#strings.toUpperCase(mystr)}"></p>
<p th:text="${#strings.indexOf(mystr,'power')}"></p>
<p th:text="${#strings.substring(mystr,2,5)}"></p>
<p th:text="${#strings.substring(mystr,2)}"></p>
<p th:text="${#strings.concat(mystr,'---java开发的黄埔军校---')}"></p>
<p th:text="${#strings.length(mystr)}"></p>
<p th:text="${#strings.length('hello')}"></p>
<p th:unless="${#strings.isEmpty(mystr)}"> mystring 不是 空字符串 </p>
<br/>
<h3>内置工具类#lists,操作list集合 122</h3>
<p th:text="${#lists.size(mylist)}"></p>
<p th:if="${#lists.contains(mylist,'a')}">有成员a</p>
<p th:if="!${#lists.isEmpty(mylist)}"> list 集合有多个成员</p>
<br/>
<h3>处理null 123</h3>
<p th:text="${zoo?.dog?.name}"></p>
</div>
</body>
</html>
3. 自定义模板 124
模板是内容复用, 定义一次,在其他的模板文件中多次使用。
模板使用:
3.1 定义模板
语法
th:fragment="模板自定义名称"
例如:
<div th:fragment="head">
<p>
动力节点-java开发
</p>
<p>
www.bjpowernode.com
</p>
</div>
3.2 使用模板 124
对于使用模板:有包含模板(th:include), 插入模板(th:insert)
1) ~{templatename :: selector}
templatename: 文件名称
selector: 自定义模板名称
2)templatename :: selector
templatename: 文件名称
selector: 自定义模板名称
// 自定义模板 125
@GetMapping("/customtpl")
public String customTemplate(Model model){
return "customtpl";
}
head.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>自定义模板 124</title>
</head>
<body>
<div th:fragment="top">
<p>北京动力节点</p>
<p>网站 www.bjpowernode.com</p>
</div>
<div th:fragment="menu">
<p>文档|下载|blog</p>
</div>
</body>
</html>
footer.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>自定义模板 125</title>
</head>
<body>
<div>
footer.html
@copy; 动力节点2020
</div>
</body>
</html>
customtpl.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>使用自定义模板 125</title>
</head>
<body>
<div style="margin-left: 350px">
<h3>插入模板 th:insert</h3>
<div th:insert="~{ head :: top }">
第一种方式使用模板th:insert
</div>
<br/>
<br/>
<h3>插入模板 第二种格式</h3>
<p th:insert="head :: top"></p>
<br/>
<br/>
<h3>包含模板,第一种语法</h3>
<div th:include="~{ head :: top}">
</div>
<br/>
<br/>
<h3>包含模板,第二种语法</h3>
<div th:include="head :: top">
</div>
<br>
<div th:include="head :: menu"></div>
<br>
</div>
</body>
</html>
3.3 引用模板文件 128
templates文件下的common目录
left.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title 128</title>
</head>
<body>
<div>
左侧树形结构
部门管理
人员管理
考勤入口
</div>
</body>
</html>
customtpl.html
<br/>
<br/>
<h3>使用整个文件作为复用的内容(整个文件作为模板使用) 127</h3>
<div th:include="footer :: html"></div>
<br/>
<div th:include="footer" ></div>
<br/>
<div th:insert="footer"></div>
<h3>使用其他目录中的模板文件 128</h3>
<div th:insert="common/left :: html"></div>
<br/>
<br/>
<div th:include="common/left"></div>