thymeleaf 语法

一、语法:

1、 简单表达式 (simple expressions)

  ${...}  变量表达式

  *{...}  选择变量表达式

  #{...}  消息表达式

  @{...}  链接url表达式

2、字面量

  ‘one text‘,‘another one!‘,...   文本

  0,34,3.0,12.3,... 数值

  true false 布尔类型

  null 空

one,sometext,main 文本字符

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  

<tr th:class="${row.even}? ‘even‘ : ‘odd‘">
  ...
</tr>

条件表达式中的三个部分自身也可以是表达式,也可以是变量(${...}, *{...}), 消息(#{...}), URL (@{...}) 或字面量 (‘...‘)
条件表达式也可以使用括号来嵌套:

<tr th:class="${row.even}? (${row.first}? ‘first‘ : ‘even‘) : ‘odd‘">
...
</tr>

else表达式也可以省略,当条件为false时,会返回null:

<tr th:class="${row.even}? ‘alt‘">
...
</tr>

(value) ?: (defaultvalue)   Default

只有在第一个表达式返回null时,第二个表达式才会运算

·表达式工具对象

  • #dates 与java.util.Date对象的方法对应,格式化、日期组件抽取等等
  • #calendars 类似#dates,与java.util.Calendar对象对应
  • #numbers 格式化数字对象的工具方法
  • #strings 与java.lang.String对应的工具方法:contains、startsWith、prepending/appending等等
  • #objects 用于对象的工具方法
  • #bools 用于布尔运算的工具方法
  • #arrays 用于数组的工具方法
  • #lists 用于列表的工具方法
  • #sets 用于set的工具方法
  • #maps 用于map的工具方法
  • #aggregates 用于创建数组或集合的聚合的工具方法
  • #messages 用于在变量表达式内部获取外化消息的工具方法,与#{…}语法获取的方式相同
  • #ids 用于处理可能重复出现(例如,作为遍历的结果)的id属性的工具方法

8、链接URL
URL在web模板中是一级重要元素,使用@{…}表示

URL的类型:

  绝对URL:

  • http://www.thymeleaf.org

  相对URL:

  • 页面相对: /user/login.html
  • 上下文相对:/itemdetails?id=3 (服务器上下文名称会被自动添加)
  • 服务器相对:~/billing/processInvoice(允许调用同一服务器上的另一个上下文中的URL)
  • 协议相对://code.jquery.com/jquery-2.0.3.min.js

Thymeleaf在任何情况下都可以处理绝对URL,对于相对URL,则需要使用一个实现了IWebContext接口的上下文对象,这个对象包含了来自HTTP请求的信息,这些信息用于创建相对链接。

<!-- 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>

9、 预处理

Thymeleaf提供预处理表达式的功能。

它是在表壳式正常执行前执行的操作,允许修改最终将要被执行的表达式。

预处理表达式跟正常的一样,但被两个下划线包围住,例如:__${expression}__

假设有一个i18n消息文件Message_fr.properties,里面有一个条目包含了一个调用具体语言的静态方法的OGNL表达式:

[email protected]@translateToFrench({0})

Messages_es.properties中的等价条目:

[email protected]@translateToSpanish({0})

可以根据locale先创建用于运算表达式的标记片段,本例中,先通过预处理选择表达式,然后让Thymeleaf处理这个选择出来的表达式:

<p th:text="${__#{article.text(‘textVar‘)}__}">Some text here...</p>

对于locale为French的情况,上面的表达式经过预处理后,得出的等价物如下:

<p th:text="${@[email protected](textVar)}">Some text here...</p>

二、 设置属性值
1、th:attr 任何属性值

<form action="subscribe.html" th:attr="[email protected]{/subscribe}">
  <fieldset>
    <input type="text" name="email" />
    <input type="submit" value="Subscribe me!" th:attr="value=#{subscribe.submit}"/>
  </fieldset>
</form>

2、多个属性一起设置,用逗号隔开

<img src="../../images/gtvglogo.png" th:attr="[email protected]{/images/gtvglogo.png},title=#{logo},alt=#{logo}" />

3、设置指定属性

th:abbr th:accept th:accept-charset
th:accesskey th:action th:align
th:alt th:archive th:audio
th:autocomplete th:axis th:background
th:bgcolor th:border th:cellpadding
th:cellspacing th:challenge th:charset
th:cite th:class th:classid ...
<input type="submit" value="Subscribe me!" th:value="#{subscribe.submit}"/>
<form action="subscribe.html" th:action="@{/subscribe}">
<li><a href="product/list.html" th:href="@{/product/list}">Product List</a></li>

4、设置多个属性在同一时间  有两个特殊的属性可以这样设置: th:alt-title 和 th:lang-xmllang

th:alt-title 设置 alt 和 title 
th:lang-xmllang 设置 lang 和 xml:lang

<img src="../../images/gtvglogo.png" th:attr="[email protected]{/images/gtvglogo.png},title=#{logo},alt=#{logo}" />
<img src="../../images/gtvglogo.png"th:src="@{/images/gtvglogo.png}" th:title="#{logo}" th:alt="#{logo}" />
<img src="../../images/gtvglogo.png"th:src="@{/images/gtvglogo.png}" th:alt-title="#{logo}" />

5、前置和后置添加属性值  th:attrappend 和 th:attrprepend

<input type="button" value="Do it!" class="btn" th:attrappend="class=${‘ ‘ + cssStyle}" />

编译后:

<input type="button" value="Do it!" class="btn warning" />

6、还有两个特定的添加属性 th:classappend 和 th:styleappend

<tr th:each="prod : ${prods}" class="row" th:classappend="${prodStat.odd}? ‘odd‘">

7、修复的布尔属性

<input type="checkbox" name="active" th:checked="${user.active}" />

所有修复的布尔属性:

|th:async |th:autofocus |th:autoplay |

|th:checked |th:controls |th:declare |

|th:default |th:defer |th:disabled |

|th:formnovalidate|th:hidden |th:ismap |

|th:loop |th:multiple |th:novalidate |

|th:nowrap |th:open |th:pubdate |

|th:readonly |th:required |th:reversed |

|th:scoped |th:seamless |th:selected |

8、HTML5友好的属性及元素名

<table>
    <tr data-th-each="user : ${users}">
        <td data-th-text="${user.login}">...</td>
        <td data-th-text="${user.name}">...</td>
    </tr>
</table>

data-{prefix}-{name}是编写HTML5自定义属性的标准语法,不需要开发者使用th:*这样的命名空间,Thymeleaf让这种语法自动对所有dialect都可用。

三、遍历

1、基础

<tr th:each="prod : ${prods}">
  <td th:text="${prod.name}">Onions</td>
  <td th:text="${prod.price}">2.41</td>
  <td th:text="${prod.inStock}? #{true} : #{false}">yes</td>
</tr>

可遍历的对象:实现java.util.Iterable、java.util.Map(遍历时取java.util.Map.Entry)、array、任何对象都被当作只有对象自身一个元素的列表

2、状态

  • 当前遍历索引,从0开始,index属性
  • 当前遍历索引,从1开始,count属性
  • 总元素数量,size属性
  • 每一次遍历的iter变量,current属性
  • 当前遍历是even还是odd,even/odd布尔属性
  • 当前遍历是第一个,first布尔属性
  • 当前遍历是最后一个,last布尔属性
<tr th:each="prod,iterStat : ${prods}" th:class="${iterStat.odd}? ‘odd‘">
  <td th:text="${prod.name}">Onions</td>
  <td th:text="${prod.price}">2.41</td>
  <td th:text="${prod.inStock}? #{true} : #{false}">yes</td>
</tr>

若不指定状态变量,Thymeleaf会默认生成一个名为“变量名Stat”的状态变量:

<tr th:each="prod : ${prods}" th:class="${prodStat.odd}? ‘odd‘">
  <td th:text="${prod.name}">Onions</td>
  <td th:text="${prod.price}">2.41</td>
  <td th:text="${prod.inStock}? #{true} : #{false}">yes</td>
</tr>

四、条件运算

<tr th:each="prod : ${prods}" th:class="${prodStat.odd}? ‘odd‘">
  <td th:text="${prod.name}">Onions</td>
  <td th:text="${prod.price}">2.41</td>
  <td th:text="${prod.inStock}? #{true} : #{false}">yes</td>
  <td>
    <span th:text="${#lists.size(prod.comments)}">2</span> comment/s
    <a href="comments.html" th:href="@{/product/comments(prodId=${prod.id})}" th:if="${not #lists.isEmpty(prod.comments)}">view</a>
  </td>
</tr>
<a href="comments.html" th:href="@{/product/comments(prodId=${prod.id})}" th:if="${not #lists.isEmpty(prod.comments)}">view</a>

1、th:if 不只运算布尔条件,它对以下情况也运算为true:

   值不为null
  值为boolean且为true
  值为数字且非0
  值为字符且非0
  值是字符串且不是:“false”,“off”,“no”
  值不是boolean、数字、字符、字符串
   如果值为null,则th:if运算结果为false

2、th:if的反面是th:unless

<a href="comments.html" th:href="@{/comments(prodId=${prod.id})}"  th:unless="${#lists.isEmpty(prod.comments)}">view</a>

3、th:switch 和 th:case

<div th:switch="${user.role}">
  <p th:case="‘admin‘">User is an administrator</p>
  <p th:case="#{roles.manager}">User is a manager</p>
</div>

<div th:switch="${user.role}">
  <p th:case="‘admin‘">User is an administrator</p>
  <p th:case="#{roles.manager}">User is a manager</p>
  <p th:case="*">User is some other thing</p>
</div>

原文地址:https://www.cnblogs.com/kingsonfu/p/9840401.html

时间: 2024-10-17 04:34:42

thymeleaf 语法的相关文章

Thymeleaf语法

Thymeleaf 官网:https://www.thymeleaf.org/ 1.入门示例 (1)在controller编写一个请求,放进去一些数据: @RequestMapping("/success") public String success(Model model){ //存入数据 model.addAttribute("msg","Hello,Thymeleaf"); //classpath:/templates/success.h

springboot整合Thymeleaf模板引擎

引入依赖 需要引入Spring Boot的Thymeleaf启动器依赖. <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>nekohtml</groupId&g

SpringBoot:模板引擎 Thymeleaf 基础使用

1    第2-3课:模板引擎 Thymeleaf 基础使用 1.1     模板引擎 模板引擎是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的 HTML 文档. 模板引擎的实现方式有很多,最简单的是"置换型"模板引擎,这类模板引擎只是将指定模板内容(字符串)中的特定标记(子字符串)替换,便生成了最终需要的业务数据(如网页). "置换型"模板引擎实现简单,但其效率低下,无法满足高负载的应用需求(比如有海量

Thymeleaf 模板引擎简介

目录 Thymeleaf 模板引擎 官方文档下载 Hello World 新建应用 后台控制器 前端页面 浏览器访问测试 Thymeleaf 模板引擎1.Thymeleaf 是 Web 和独立环境的现代服务器端 Java 模板引擎,能够处理HTML,XML,JavaScript,CSS 甚至纯文本. 2.Thymeleaf 的主要目标是提供一种优雅和高度可维护的创建模板的方式.为了实现这一点,它建立在自然模板的概念上,将其逻辑注入到模板文件中,不会影响模板被用作设计原型.这改善了设计的沟通,弥补

spring boot整合Thymeleaf

1.引入thymeleaf: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> 2.1.6 </dependency> 切换thymeleaf版本 <properties> <thymeleaf.version>3.0.9.RELEASE&

Thymeleaf3语法详解解解解解

Thymeleaf3语法详解 Thymeleaf是Spring boot推荐使用的模版引擎,除此之外常见的还有Freemarker和Jsp.Jsp应该是我们最早接触的模版引擎.而Freemarker工作中也很常见(Freemarker教程).今天我们从三个方面学习Thymeleaf的语法:有常见的TH属性,四种标准表达式用法,在SpringBoot中的应用.还在等什么,一起来学吧! 技术:Thymeleaf,SpringBoot 说明:为突出Thymeleaf3的语法知识,文章只提出与Thyme

thymeleaf各种问题,标签没用?网页404?

首先html的网页 <!DOCTYPE html> //注意这个xmlns后面一定是https,我的就是没加s导致无法识别msg这种变量 <html lang="en" xmlns:th="https://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Thymeleaf 语法</title> </hea

Thymeleaf静态资源引入方式及公共页面代码抽取

静态资源引入 Thymeleaf模板引擎url问题,要用如下的方式写,确保在任何情况下都能访问到 <!-- Bootstrap core CSS --> <link href="bootstrap/dist/css/bootstrap.min.css" rel="stylesheet"> <!-- 引用webjars的方式引入静态资源 --> <link th:href="@{/webjars/bootstrap/

Thymeleaf模板引擎的使用

Thymeleaf模板引擎的使用 一.模板引擎 JSP.Velocity.Freemarker.Thymeleaf 二.springboot推荐使用Thymeleaf模板引擎 特点:语法更简单,功能更强大: 1.引入Thymeleaf <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId