thymeleaf模板引擎
1、简介
Thymeleaf是一个现代服务器端Java模板引擎,适用于Web和独立环境,能够处理HTML,XML,JavaScript,CSS甚至纯文本。
Thymeleaf的主要目标是提供一种优雅且高度可维护的模板创建方式。为实现这一目标,它以自然模板的概念为基础,将其逻辑注入模板文件,其方式不会影响模板被用作设计原型。这改善了设计沟通,缩小了设计和开发团队之间的差距。
Thymeleaf也从一开始就设计了Web标准 - 特别是HTML5 - 允许您创建完全验证的模板,如果您需要的话
Spring Boot 中可以支持很多模板引擎,Thymeleaf
是 Spring Boot 官方推荐使用的模板引擎
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rQ1iUujZ-1608027005320)(7、thymeleaf模板引擎.assets/15839491-e1448ac7b37f36e6.png)]
1.2 为什么会用到模板引擎?
1.3 模板引擎
模板引擎(这里特指用于Web开发的模板引擎)是为了使用户界面与**业务数据(内容)**分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档。
- Thymeleaf
- Velocity
- Freemarker
- jsp
1.4 使用thymeleaf
1.4.1 导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-java8time</artifactId>
</dependency>
1.4.2 静态资源
@ConfigurationProperties(prefix = "spring.thymeleaf")
public class ThymeleafProperties {
private static final Charset DEFAULT_ENCODING = StandardCharsets.UTF_8;
public static final String DEFAULT_PREFIX = "classpath:/templates/";
public static final String DEFAULT_SUFFIX = ".html";
将html
页面放在classpath:/templates/
下即可
1.4.3 实例
/WEB-INF/templates/home.html
命名空间:xmlns:th="http://www.thymeleaf.org"
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Good Thymes Virtual Grocery</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" type="text/css" media="all"
href="../../css/gtvg.css" th:href="@{/css/gtvg.css}" />
</head>
<body>
<p th:text="#{home.welcome}">Welcome to our grocery store!</p>
</body>
</html>
1.5 thymeleaf语法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VY1m58ZV-1608027005325)(7、thymeleaf模板引擎.assets/806956-20180412175920781-874860611.png)]
1.5.1 th属性
-
th:text :设置当前元素的文本内容,相同功能的还有th:utext,两者的区别在于前者不会转义html标签,后者会。优先级不高:order=7
-
<h1 th:text="${msg}"></h1>
-
-
th:value:设置当前元素的value值,类似修改指定属性的还有th:src,th:href。优先级不高:order=6
-
th:each:遍历循环元素,和th:text或th:value一起使用。注意该属性修饰的标签位置,详细往后看。优先级很高:order=2
-
<tr th:each="user:${userlist}"> <td th:text="${user.id}"></td> <td th:text="${user.username}"></td> <td th:text="${user.password}"></td> <td th:text="${user.petname}"></td> </tr>
-
<!--th:each 遍历列表,常用,优先级很高,仅此于代码块的插入--> <!--th:each 修饰在div上,则div层重复出现,若只想p标签遍历,则修饰在p标签上--> <div th:each="message : ${thEach}"> <!-- 遍历整个div-p,不推荐--> <p th:text="${message}" /> </div> <div> <!--只遍历p,推荐使用--> <p th:text="${message}" th:each="message : ${thEach}" /> </div>
-
-
th:if:条件判断,类似的还有th:unless,th:switch,th:case。优先级较高:order=3
-
<td th:if="${order.productStateName}==部分退款" th:text="交易成功" class="validate"></td> <!--只有在th:if中条件成立时才显示-->
-
<td th:unless="${order.productStateName}==部分退款" th:text="${order.productStateName}"></td> <!--th:unless于th:if恰好相反,只有表达式中的条件不成立,才会显示其内容。-->
-
-
th:insert:代码块引入,类似的还有th:replace,th:include,三者的区别较大,若使用不恰当会破坏html结构,常用于公共代码块提取的场景。优先级最高:order=1
-
th:fragment:定义代码块,方便被th:insert引用。优先级最低:order=8
-
th:object:声明变量,一般和*{}一起配合使用,达到偷懒的效果。优先级一般:order=4
-
th:attr:修改任意属性,实际开发中用的较少,因为有丰富的其他th属性帮忙,类似的还有th:attrappend,th:attrprepend。优先级一般:order=5
-
th:utext:
@Controller public class ThymeleafController { @RequestMapping("thymeleaf") public String thymeleaf(ModelMap map) { map.addAttribute("thText", "th:text 设置文本内容 <b>加粗</b>"); map.addAttribute("thUText", "th:utext 设置文本内容 <b>加粗</b>"); return "thymeleaf"; } }
html
<p th:text="${thText}" /> <p th:utext="${thUText}" />
th:text 设置文本内容 <b>加粗</b> th:utext 设置文本内容 加粗
1.5.2 表达式
Simple expressions:(表达式语法)
Variable Expressions: ${...}:获取变量值;OGNL;
Selection Variable Expressions: *{...}:选择表达式:和${}在功能上是一样;
Message Expressions: #{...}:获取国际化内容
Link URL Expressions: @{...}:定义URL;
Fragment Expressions: ~{...}:片段引用表达式
Literals(字面量):
Text operations: (文本操作)
Arithmetic operations: (数学运算)
Boolean operations: (布尔运算)
Comparisons and equality: (比较运算)
Conditional operators: 条件运算(三元运算符)
Special tokens:
No-Operation: _