Thymeleaf是个XML/XHTML/HTML5模板引擎,可以用于Web与非Web应用。
Thymeleaf的主要目标在于提供一种可被浏览器正确显示的、格式良好的模板创建方式,因此也可以用作静态建模。你可以使用它创建经过验证的XML与HTML模板。相对于编写逻辑或代码,开发者只需将标签属性添加到模板中即可。接下来,这些标签属性就会在DOM(文档对象模型)上执行预先制定好的逻辑。Thymeleaf的可扩展性也非常棒。你可以使用它定义自己的模板属性集合,这样就可以计算自定义表达式并使用自定义逻辑。这意味着Thymeleaf还可以作为模板引擎框架。
Thymeleaf的模板还可以用作工作原型,Thymeleaf会在运行期替换掉静态值。例如下面的html文件,当作为静态文件时,product name显示为Red Chair,当运行在容器中并提供product这个对象时,product name的值会自动替换为product.description对应的值。下面就简单的讲一讲springboot整合thymeleaf模板。
1.引入依赖
在maven(pom.xml)中直接引入:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
也可以在创建项目时候勾选thymeleaf模板,这样会自动生成。
2.配置视图解析器
(1)默认
spring-boot很多配置都有默认配置,比如默认页面映射路径为
classpath:/templates/*.html
同样静态文件路径为
classpath:/static/
(2)自定义
在application.properties(或者application.yml)中可以配置thymeleaf模板解析器属性.就像使用springMVC的JSP解析器配置一样
#thymeleaf start
spring.thymeleaf.mode=HTML5
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.content-type=text/html
#开发时关闭缓存,不然没法看到实时页面
spring.thymeleaf.cache=false
#thymeleaf end
具体可以配置的参数可以查看 org.springframework.boot.autoconfigure.thymeleaf.ThymeleafProperties 这个类,上面的配置实际上就是注入到该类中的属性值.
3.编写demo来说明使用方法
(1)控制器
@Controller
public class HelloController(){
@RequestMapping(value = "/")
public String index(){
return "index";
}
}
这样会返回一个新的视图页面index.html,当然也可以使用下面的方法
@RequestConteoller
public class HelloController(){
@RequestMapping(value = "/")
public ModelAndView index(){
return new ModelAndView("index");
}
}
这样能直接返回整个index页面。
(2)view
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" >
<head>
<meta charset="UTF-8"/>
<title>Title</title>
</head>
<body>
<b th:text="hello,world!"><b/>
</body>
</html>
注意,在html标签里一定要引入 xmlns:th=“http://www.thymeleaf.org” ,这样thymeleaf模板才会启用。至于thymeleaf的具体使用方法,以后在讲。
(3)测试
访问 localhost:8080/ 这个地址,会直接跳转到 index.html 页面,并显示如下
4.基础语法
(1)引入标签
首先要在html标签里引入xmlns:th="http://www.thymeleaf.org"才能使用th:*这样的语法。
(2)获取变量值
通过在标签内部,使用 ${} 来取值,对于javaBean的话,使用 变量名.属性名 来获取,跟EL表达式一样
注意:只有写在标签内部才会生效,例如: th:text=“hello” 的意思是使用hello来代替p之前的内容,p里原来的值是为了给前端开发展示用的,这样做容易实现前后端分离。
(3)引入URL
thymeleaf对于引入URL是采用@{…}来获取的
例如: 绝对路径 是访问绝对路径下的URL, 相对路径 是访问相对路径下的URL。
是引入默认的static下的css文件夹下的bootstrap文件,类似的标签有: th:href 和 th:src
(4)字符串替换
例如使用: 或者
<span th:text="|Welcome to our application, ${user.name}!|"></span> 都可以实现替换
注意:|…|中只能包含变量表达式${…},不能包含其他常量、条件表达式等。
(5)运算符
在表达式中可以使用各类算术运算符,例如 +, -, *, /, % .例如: th:with=“isEven=(${prodStat.count} % 2 == 0)”
逻辑运算符 >, <, <=,>=,==,!= 都可以使用,唯一需要注意的是使用 <,> 时需要用它的HTML转义符:
th:if="${prodStat.count} > 1"
th:text="'Execution mode is ' + ( (${execMode} == 'dev')? 'Development' : 'Production')"
(6)条件
if/unless th:if是该标签在满足条件的时候才会显示,unless是不成立时候才显示,例如
<a th:href="@{/login}" th:unless=${session.user != null}>Login</a>
Switch thymeleaf支付switch结构,默认属性(default)用*表示,例如:
<div th:switch="${user.role}">
<p th:case="'admin'">User is an administrator</p>
<p th:case="#{roles.manager}">User is a manager</p>