一、快速入门

1、导入依赖

  首先导入 Thymeleaf 的依赖。

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

  SpringBoot 自动配置了 thymeleaf,参数如下:

@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";

2、编写接口

  只要我们把 HTML 页面放在 classpath:/templates/,thymeleaf 就能自动渲染。

@RequestMapping("/")
@Controller
public class DemoController {

    @RequestMapping(value = "/success")
    public String success(Model model) {
        model.addAttribute("hello","Yi-Xing");
        // classpath:/templates/success.html
        return "success";
    }
}

3、编写页面  

  Thymeleaf 的名称空间。

<html xmlns:th="http://www.thymeleaf.org">

  使用 Thymeleaf 映射数据。

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="utf-8">
    <title>Yi-Xing</title>
</head>
<body>

<h1>success</h1>
<p th:text="${hello}">我的第一个段落。</p>

</body>
</html>

二、语法规则

1、常用标签

  • th:action 定义后台控制器路径
  • th:each 循环语句
  • th:field 表单字段绑定
  • th:href 定义超链接
  • th:id div 标签中的 id 声明,类似 HTML 标签中的 id 属性
  • th:if 条件判断语句
  • th:include 布局标签,替换内容到引入文件
  • th:fragment 布局标签,定义一个代码片段,方便其它地方引用
  • th:object 替换对象
  • th:src 图片类地址引入
  • th:text 显示文本
  • th:value 属性赋值

  th:text 改变当前元素里面的文本内容。th:任意 HTML 属性;来替换原生属性的值。Thymeleaf 属性都定义了一个数字优先级,它确定了它们在标记中的执行顺序。

image.png

2、常用函数:

  • #dates 日期函数
  • #lists 列表函数
  • #arrays 数组函数
  • #strings 字符串函数
  • #numbers 数字函数
  • #calendars 日历函数
  • #objects 对象函数
  • #bools 逻辑函数

3、获取对象的属性,调用方法

使用点(.)访问属性。相当于调用属性 getter。

${person.father.name}

也可以通过使用方括号([])并将属性名称作为变量或在单引号之间写入来访问属性。

${person['father']['name']}

如果对象是一个映射,则点和括号语法都将等效于对其 get(…)方法执行调用。

${countriesByCode.ES} 
${personsByName['Stephen Zucchini'].age}

对数组或集合的索引访问也用括号执行,在括号中写入索引。

${personsArray[0].name}

方法可以被调用,也可以有参数。

${person.createCompleteName()} 
${person.createCompleteNameWithSeparator('-')}

4、内置的基本对象

  • #ctx : 上下文对象。
  • #vars: 上下文变量。
  • #locale : 上下文区域设置。
  • #request : (仅在 Web 上下文中)HttpServletRequest 对象。
  • #response : (仅在 Web 上下文中)HttpServletResponse 对象。
  • #session :(仅在 Web 上下文中)HttpSession 对象。
  • #servletContext : (仅在 Web 上下文中)servletContext 对象。

5、内置的一些工具对象

  • #execInfo:关于正在处理的模板的信息。
  • #messages:在变量表达式中获取外部化消息的方法,与使用#{…}语法获得消息的方法相同。
  • #uris:用于转义 url/uri 部分的方法
  • #conversions:执行配置的转换服务(如果有)的方法。
  • #dates:方法 java.util.Date 对象:格式化、组件提取等。
  • #calendars:类似于日期, java.util.Calendar。
  • #numbers:格式化数字对象的方法。
  • #strings:String 对象的方法:contains、startsWith、prepending/appending 等。
  • #objects:对象的一般方法。
  • #bools:布尔求值的方法。
  • #arrays:数组的方法。
  • #lists:列表的方法。
  • #sets:set 的方法。
  • #maps:map 的方法。
  • #aggregates:在数组或集合上创建集合的方法。
  • #ids:处理可能重复的 id 属性的方法(例如,作为迭代的结果)。

  格式化日期

 <span th:text="${#calendars.format(today,'dd MMMM yyyy')}">13 May 2011</span> 

6、常用表达式

  *{...} 选择表达式 ,如果没有执行对象,则和 ${} 在功能上是一样的。

<div>  
    <p>Name: <span th:text="${session.user.firstName}">Sebastian</span>.</p>  
    <p>Surname: <span th:text="${session.user.lastName}">Pepper</span>.</p>  
    <p>Nationality: <span th:text="${session.user.nationality}">Saturn</span>.</p> 
</div>

<div th:object="${session.user}">  
    <p>Name: <span th:text="*{firstName}">Sebastian</span>.</p>  
    <p>Surname: <span th:text="*{lastName}">Pepper</span>.</p>  
    <p>Nationality: <span th:text="*{nationality}">Saturn</span>.</p>  
</div>

  @{...}定义 URL。

<!-- Will produce 'http://localhost:8080/gtvg/order/details?orderId=3' (plus rewriting) --> 
<a href="details.html"
    th:href="@{http://localhost:8080/gtvg/order/details(orderId=${o.id})}">view</a>

<!-- Will produce '/gtvg/order/details?orderId=3' (plus rewriting) --> 
<a href="details.html" th:href="@{/order/details(orderId=${o.id})}">view</a>

<!-- Will produce '/gtvg/order/3/details' (plus rewriting) --> 
<a href="details.html" th:href="@{/order/{orderId}/details(orderId=${o.id})}">view</a>

  ~{...}片段引用表达式。

  #{...}获取国家化内容。

7、字面量

  • 文本文字: 'one text' , 'Another one!' ,…
  • 数字文字: 0 , 34 , 3.0 , 12.3 ,…
  • 布尔字面常数: true , false
  • 空文字: null
  • 文字标记: one , sometext , main ,…

8、运算符

  • 字符串拼接:+
  • 数学运算: + , - , * , / , %
  • 布尔运算: and , or,! , not
  • 比较运算符: > , < , >= , <= ( gt , lt , ge , le ),== , != ( eq , ne )
  • 条件运算符:
    • If-then: (if) ? (then)
    • If-then-else: (if) ? (then) : (else)
    • Default: (value) ?: (defaultvalue)

9、页面嵌套

  抽取公共片段。

<div th:fragment="copy"> </div>

  引入公共片段。

<div th:insert="~{footer :: copy}"> </div>

 三种引入功能片段(可以设置参数)

  • th:insert:将公共片段整个插入到声明引入的元素中
  • th:replace:将声明引入的元素替换为公共片段
  • th:include:将被引入的片段的内容包含进这个标签中

三、关闭 Thymeleaf 的缓存

spring:
  thymeleaf:
    cache: false

标题:SpringBoot Web开发——模板引擎(Thymeleaf)
作者:Yi-Xing
地址:http://47.94.239.232/articles/2020/04/02/1585810502087.html
博客中若有不恰当的地方,请您一定要告诉我。前路崎岖,望我们可以互相帮助,并肩前行!