Thymeleaf是一个流行的模板引擎,该模板引擎采用java语言开发;Thymeleaf模板既能用于web环境下,也能用于非web环境下,在非web环境下,它能直接显示模板上的静态数据,在web环境下,它能像JSP一样从后台接收数据并替换掉模板;Thymeleaf模板它是基于HTML的,以HTML标签为载体,Thymeleaf要寄托在HTML的标签下实现对数据的展示
- 在Controller层:
@Controller
public class ThymeleafController {
@RequestMapping("/boot/index")
public String index(Model model){
model.addAttribute("data","SpringBoot集成Thymeleaf");
return "index";
}
}
在Controller层是使用Model来存放后端数据的,前端可以使用${}从Model中取出来。Model中可以存放实体类的引用,前端可以通过${引用.属性}来获取
- index.html页面:
<!DOCTYPE html>
<html lang="en">
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>SpringBoot集成Thymeleaf</title>
</head>
<body>
<span th:text="${data}"></span>
</body>
</html>
注意:由于html原本没有th:这个属性所以需要在头部添加<html xmlns:th=“http://www.thymeleaf.org”>即可识别到
- 在application.properties文件中:
#开发阶段,建议关闭thymeleaf的缓存
spring.thymeleaf.cache=false
URL表达式
语法:@{}
URL表达式可用于<script src="…">、<link href="…">、<a href="…">等
- 绝对URL,比如:
<a th:href="@{'http://localhost:8080/boot/user/info?id='+${user.id}}">查看</a>
- 相对URL,相对于页面:
<a th:href="@{'user/info?id='+${user.id}}">查看</a>
- 相对URL,相对项目上下文(即项目上下文路径会被自动添加,这样子能很有效的防止404):
<a th:href="@{'/user/info?id='+${user.id}}">查看</a>
th:each属性
- List类型:
<tr th:each="user,interStat:${userlist}">
<td th:text="${userStat.count}"></td><!--变量名加Stat.count即可输出当前循环对象的个数,从1开始-->
<td th:text="${user.id}"></td>
<td th:text="${user.nick}"></td>
<td th:text="${user.phone}"></td>
<td th:text="${user.email}"></td>
<td th:text="${user.address}"></td>
</tr>
- Map类型:
<div th:each="myArayVal : ${myArray}">
<div th:text="${myArrayVal}"></div>
</div>
- 数组类型:
<div th:each="myArayVal : ${myArray}">
<div th:text="${myArrayVal}"></div>
</div>
th:inline内联文本、内联脚本(主要用在js取动态数据)
th:inline有三个取值类型{text,javascript和none},该属性使用内联表达式[[…]]展示变量数据
<span th:line="text">Hello,[[${user.nick}]]</span>
<!--等同于-->
<span>Hello,<span th:text="{user.nick}"></span></span>
<!--th:inline写在任何父标签都可以,比如如下也是可以的-->
<body th:inline="text">
...
<span>[[${user.nick}]]</span>
</body>
<!--内联脚本-->
<script th:inline="javascript" type="text/javascript">
var user = [[${user.phone}]];
alert(user);
</script>
<script th:inline="javascript" type="text/javascript">
var msg = "Hello,"+[[${user.phone}]];
alert(msg);
</script>
表达式基本对象
thymeleaf模板引擎提供了一组内置的对象,这些内置对象可以直接在模板中使用,这些对象由#号开始引用
#request对象:相对于HttpServletRequest对象,这是3.x版本,若是2.x版本使用#httpServletRequest
${#request.getContextPath()}
${#request.getAttribute("phone")}
#session对象:相对于HttpSession对象,这是3.x版本,若是2.x版本使用#httpSession
注意:需要在后台Controller中设置session
${#session.getAttribute("phone")}
${#session.id}
${#session.lastAccessedTime}
Thymaleaf表达式功能对象
模板引擎提供的一组功能性内置对象,可以在模板中直接使用这些对象提供的功能方法;工作中常使用的数据类型,如集合,时间,数值,可以使用Thymeleaf的提供的功能性对象来处理它们;内置功能对象前都需要加#号,内置对象一般都以s结尾;
#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: 对数组或集合创建聚合的实用方法;