thymeleaf模板引擎

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:srcth: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:unlessth:switchth: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:replaceth: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: _ 
上一篇:html标签(4):ul,ol,li,table,tr,td,th


下一篇:CF573E Bear and Bowling(6-1)