Thymeleaf的语法详解及使用

450 阅读2分钟

这是我参与11月更文挑战的第13天,活动详情查看:2021最后一次更文挑战

了解Thymeleaf

Thymeleaf是面向Web和独立环境的现代服务器端Java模板引擎,能够处理HTML,XML,JavaScript,CSS甚至纯文本。

Thymeleaf旨在提供一个优雅的、高度可维护的创建模板的方式。为了实现这一目标,Thymeleaf建立在自然模板的概念上,将其逻辑注入到模板文件中,不会影响模板设计原型。这改善了设计的沟通,弥合了设计和开发团队之间的差距。

Thymeleaf从设计之初就遵循Web标准-----特别是HTML5标准,如果需要,Thymeleaf允许您创建完全符合HTML5验证标准的模板。

SpringBoot体系内推荐使用Thymeleaf作为前端压面模板,并且SpringBoot2.0中默认使用Thymeleaf3.0,性能提升幅度很大。

Thymeleaf的特点

  • Thymeleaf 在不管是否连接服务器的环境下皆可运行,即它可以让美工在浏览器查看页面的静态效果,也可以让程序员在服务器查看带数据的动态页面效果。
  • Thymeleaf开箱即用的特性,避免每天套模板、改JSTL、OGNL表达式效果,避免每天套模板、改JSTL、改标签的困扰。同时开发人员也可以扩展和创建自定义的方言。
  • Thymeleaf提供Spring标准方言和一个与SpringMVC完美集成的可选模块,可以快速地实现表单绑定、属性编辑器、国际化等功能。

Thymeleaf在Springboot下的快速入门

 这里是step 7 

操作部分,新建一个项目,写一个controller ,模板文件下 放入一个参数 。

Thymeleaf基本语法

th属性

  • 文本属性
  1. 文本拼接 : ||       所有的内容都在两个| 中间 
  2. 文本信息 : th:text , th:id , th:value ....
  3. 文本信息(可以解析HTML各位) :  th:utext

新建一个controller ,传递对象用modelMap ,id, value ,text  。

新建一个text.html  用th 标签来哦新家

  • 条件属性
  1. if判断:th:if 
  2. unless 判断 : th:unless  ,相对于if 的意思 是取反
  3. switch 判断 : th:switch .... th:case 

新建一个controller ,传递对象用modelMap: flag, baidu ,taobao , age 。

新建一个if.html 用th:if 标签来判断

  • 循环属性 th:each
  1. th: each迭代list
  2. th: each的内置属性
  3. th: each迭代map

Thymeleaf的表达式语法

  • ${...} 变量表达式 :也叫OGNL 表达式或Spring EL 表达式,用于调用各种属性和方法
  1. 可以获取对象的属性和方法

  2. 可以使用ctx,vars,locale,request,response,sess,servletContext内置对象

  3. 可以使用dates,nymbers,strings,objects,arrays,lists,sets,maps等内置方法

  • @{...}链接表达式:不管是静态资源的引用,form表单的请求,凡是链接都可以用@{...}
  1. 无参 : @{/xxx}

  2. 有参 : @{/xxx{(k1=v1,k2=v2)} ,对应 url结构 :xxx?k1=v1&k2=v2 

  3. 引入本地资源 : @{/项目本地的资源路径}

  4. 引入外部资源 : @{/webjars/资源在jar包中的路径}

  • #{...}消息表达式:用于从消息源中提取消息内容实现国际化
  1. 语法和变量表达式相比多了个获取参数的方式

  2. 消息源主要是properties文件

  • ~{...}代码块表达式:把某一段定义好的代码块插入到另外一个页面中,一般用于定义出一套通用的header或者是footer
  • 语法:{templatename::fragmentname}或者{templatename::#id},如果省略templatename,它将在当前页面进行寻找指定的代码块,注意~{}可以省略
  1. templatename : 模板名,定义模板的写法 :

  2. fragmentname : 片段名,引入模板的写法 :

  3. id:HTML的id选择器,使用时要在前面加上#号,不支持class选择器

  • 代码块表达式需要配合th属性(th:insert , th:replace , th:include)一起使用 。
  1. th:insert 将代码块片段整个插入到使用了th:insert的HTML标签中

  2. th:replace 将代码块片段整个替换到使用了th:replace的HTML标签中

  3. th:include 将代码块片段包含的内容插入到使用了th:include的HTML标签中

*{...}选择变量表达式:是另一种类似...,在某些时候,两者是等价的,选择变量表达式在执行时是在选择的对象上求解(使用th:object来选择对象),而{...} ,在某些时候,两者是等价的,选择变量表达式在执行时是在选择的对象上求解(使用th:object来选择对象),而{...}是在上下文的变量Map上求解。

  1. 两者获取对象里面属性的方式
  2. 两者进行混用的条件