简介

Thymeleaf is a modern server-side Java template engine for both web and standalone environments, capable of processing HTML, XML, JavaScript, CSS and even plain text.
现代化、服务端Java模板引擎

基本语法

1、表达式

表达式名字 语法 用途
变量取值 ${…} 获取请求域、session域、对象等值
选择变量 *{…} 获取上下文对象值
消息 #{…} 获取国际化等值
链接 @{…} 生成链接
片段表达式 ~{…} jsp:include 作用,引入公共页面片段

2、字面量

文本值: ‘one text’ , ‘Another one!’ ,…数字: 0 , 34 , 3.0 , 12.3 ,…布尔值: true , false
空值: null
变量: one,two,…. 变量不能有空格

3、文本操作

字符串拼接: +
变量替换: |The name is ${name}|

4、数学运算

运算符: + , - , * , / , %

5、布尔运算

运算符: and , or
一元运算: ! , not

6、比较运算

比较: > , < , >= , <= ( gt , lt , ge , le )等式: == , != ( eq , ne )

7、条件运算

If-then: (if) ? (then)
If-then-else: (if) ? (then) : (else)
Default: (value) ?: (defaultvalue)

8、特殊操作

无操作: _

设置属性值-th:attr

设置单个值

  1. <form action="subscribe.html" th:attr="action=@{/subscribe}">
  2. <fieldset>
  3. <input type="text" name="email" />
  4. <input type="submit" value="Subscribe!" th:attr="value=#{subscribe.submit}"/>
  5. </fieldset>
  6. </form>

设置多个值

  1. <img src="../../images/gtvglogo.png" th:attr="src=@{/images/gtvglogo.png},title=#{logo},alt=#{logo}" />

以上两个的代替写法 th:xxxx

  1. <input type="submit" value="Subscribe!" th:value="#{subscribe.submit}"/>
  2. <form action="subscribe.html" th:action="@{/subscribe}">

所有h5兼容的标签写法
https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#setting-value-to-specific-attributes

迭代

  1. <tr th:each="prod : ${prods}">
  2. <td th:text="${prod.name}">Onions</td>
  3. <td th:text="${prod.price}">2.41</td>
  4. <td th:text="${prod.inStock}? #{true} : #{false}">yes</td>
  5. </tr>
  1. <tr th:each="prod,iterStat : ${prods}" th:class="${iterStat.odd}? 'odd'">
  2. <td th:text="${prod.name}">Onions</td>
  3. <td th:text="${prod.price}">2.41</td>
  4. <td th:text="${prod.inStock}? #{true} : #{false}">yes</td>
  5. </tr>

条件运算

  1. <a href="comments.html"
  2. th:href="@{/product/comments(prodId=${prod.id})}"
  3. th:if="${not #lists.isEmpty(prod.comments)}">view</a>
  1. <div th:switch="${user.role}">
  2. <p th:case="'admin'">User is an administrator</p>
  3. <p th:case="#{roles.manager}">User is a manager</p>
  4. <p th:case="*">User is some other thing</p>
  5. </div>

属性优先级

image.png

thymeleaf 使用

1、引入Starter

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-thymeleaf</artifactId>
  4. </dependency>

Spring Boot 已经自动配置好了 thymeleaf

  1. @Configuration(proxyBeanMethods = false)
  2. @EnableConfigurationProperties(ThymeleafProperties.class)
  3. @ConditionalOnClass({ TemplateMode.class, SpringTemplateEngine.class })
  4. @AutoConfigureAfter({ WebMvcAutoConfiguration.class, WebFluxAutoConfiguration.class })
  5. public class ThymeleafAutoConfiguration { }

自动配好的策略

  • 1、所有thymeleaf的配置值都在 ThymeleafProperties
  • 2、配置好了 SpringTemplateEngine
  • 3、配好了 ThymeleafViewResolver
  • 4、我们只需要直接开发页面 ```java public static final String DEFAULT_PREFIX = “classpath:/templates/“;

public static final String DEFAULT_SUFFIX = “.html”; //xxx.html

  1. 2、模板文件加入 thymeleaf 命名空间
  2. ```html
  3. <html xmlns:th="http://www.thymeleaf.org">