Thymeleaf

表达式汇总

首先先加入命名空间

<html xmlns:th="http://www.thymeleaf.org">
编号 属性 描述 示例
1 $ {...} 变量表达式,可用于获取后台传过来的值 <p th:text="${userName}">中国</p>
2 * {...} 选择变量表达式  
3 #{...} 消息表达式  
4 @{...} 链接⽹址表达式,用于替换网页中的 src、href 等的值 th:href="@{/css/home.css}"
5 〜{...} ⽚段表达式,可以用于引用公共的目标片段 <div th:insert="~{footer :: copy}">

*{...}

不仅可以将变量表达式写为${...},也可以写为*{...}。

有一个重要的区别:星号语法评估所选对象而不是整个上下文的表达式。也就是说,只要没有选定的对象,美元和星号语法就会完全相同。

<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>
等价于
<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>

片段表达式 ~{...}

定义代码片段

th:fragment

例如定义一个footer,如下:

<!DOCTYPE html>
<html xmlns:th=“ http://www.thymeleaf.org” >
<body>
<div th:fragment=“ copy” >
© 2011 The Good Thymes Virtual Grocery
</div>
</body>
</html>

如果某页面需要包含footer,则使用 th:insert或者th:replace,从Thymeleaf 3.0开始,不推荐使用th:include

插入片段例子:

<body>
…
<div th:insert=“ \~{footer :: copy}” ></div>
</body>

插入片段的三种语法:

~{templatename::selector}— ~{templatename::fragmentname} 引用模板中的一个片段,一个区域
~{templatename} 引用一个完整的模板
~{::selector}” or “ ~{this::selector}” 引用本模板页中的片段
也可以使用id进行引用:

<div id=“ copy-section” >
© 2011 The Good Thymes Virtual Grocery
</div>
<body>
…
<div th:insert=“ \~{footer :: #copy-section}” ></div>
</body>

th:insert 和 th:replace区别
th:insert,是最简单的,只是插入相关的片段
th:replace 用指定的替换现在的标签片段
th:insert 只是插入指定片段的内容
如下:片段:

<footer th:fragment=“ copy” >
© 2011 The Good Thymes Virtual Grocery
</footer>

插入替换:

<body>
…
<div th:insert=“ footer :: copy” ></div>
<div th:replace=“ footer :: copy” ></div>
<div th:include=“ footer :: copy” ></div>
</body>

结果:

<body>
…
<div>
<footer>
© 2011 The Good Thymes Virtual Grocery</footer></div><footer>© 2011 The Good Thymes Virtual Grocery
</footer>
<div>
© 2011 The Good Thymes Virtual Grocery
</div>
</body>

@{...} 处理 url 地址

Thymeleaf 的 @ {...} 表达式用于处理 web 应用中的 url 地址,可以是相对地址,也可以是绝对地址。

@{/}  斜杠开头表示相对整个应用根目录,"/" 表示 "/应用上下文路径"

假如页面当前浏览器地址为:http://localhost/thymeleaf/user/userHome,其中 thymeleaf 表示应用上下文路径,user/userHome 为后台请求路径,则常用的写法如下:

1)@{userList} 相对当前路径结果为:http://localhost/thymeleaf/user/userList
2)@{./userList} 相对当前路径结果为:http://localhost/thymeleaf/user/userList
3)@{../tiger/home} 相对当前路径结果为:http://localhost/thymeleaf/tiger/home
4)@{/tiger/home} 相对应用根目录结果为:http://localhost/thymeleaf/tiger/home
5)@{https://www.baidu.com/} 绝对路径结果为:https://www.baidu.com
6) type="text/css" rel="stylesheet" th:href="@{/css/home.css}">,@ 以 "/" 开头相对应用根目录,否则是相对当前路径。

<body>
<a th:href="@{userList}">1、@{userList}</a>
<a th:href="@{./userList}">2、@{./userList}</a>
<a th:href="@{../tiger/home}">3、@{../tiger/home}</a>
<a th:href="@{/tiger/home}">4、@{/tiger/home}</a>
<a th:href="@{https://www.baidu.com}">5、@{https://www.baidu.com}</a>
</body>

@{...} 携带参数

th:href 是⼀个修饰符属性,将表达式结果设置为标签 href 属性的值,请求地址中携带参数传往服务器是很常见的操作,常用操作如下:

<body>
<a th:href="@{userList(id=9527)}">1、@{userList(id=9527)}</a>
<a th:href="@{userList(id=9527,name=华安)}">2、@{userList(id=9527,name=华安)}</a>
<a th:href="@{userList(id=9527,name=${userName})}">3、@{userList(id=9527,name=${userName})}</a>
</body>

1)在 @{...}表达式末尾使用 "()" 设置参数;
2)多个参数时,使用 "," 隔开
3)参数值可以使用表达式动态取值。

文本及其操作

⽂本⽂字指包含在单引号之间的字符串,它们可以包含任何字符,但如果字符串有空格时,必须使用单引号" ' "包含。

<body>
<!--中间无空格时,可以不加单引号-->
<p th:text="China">中国</p><!--空格属于特殊字符,必须使用单引号包含整个字符串-->
<p class="css1 css2" th:class="'css1 css2'">样式</p><!--下面如果没用单引号 th:text="Big China",则页面直接报错-->
<p th:text="'Big China'">中国</p><!--后台使用:model.addAttribute("info", "Love you 中国"); 传值有空格也是没有问题的-->
<p th:text="${info}">info</p><!--后台传值字符串有空格是可以的,可以使用 + 进行字符串连接-->
<p th:text="'small smile'+',very good.'">浅浅的微笑</p>
</body>

字符串追加

⽆论是字符串⽂本常量,还是通过变量表达式或消息表达式计算的结果,都可以使⽤ "+" 运算符轻松地追加⽂本。

<span th:text="'The name of the user is ' + ${user.name}">

数字字⾯量

<body>
<!--直接用 80 替换-->
<p th:text="80">8</p>
<!--计算结果为 16 在进行替换-->
<p th:text="8+8">8 + 8</p>
<!--前面 8+8 计算结果为 16,然后字符串拼接上 Love,后面的 9+9也会被当做字符串拼接-->
<p th:text="8+8+' Love '+9+9">8 + 8+' Love '+9+9</p>
<!--前面 8+8 计算结果为 16,后面的 9+9因为有括号,所以也会计算结果,最后拼接 Love 字符串-->
<p th:text="8+8+' Love '+(9+9)">8 + 8+' Love '+(9+9)</p>
<!--后台传了一个:model.addAttribute("age", 35);取得结果后在进行计算-->
<p th:text="100-${age}"></p>
</body>

布尔字⾯量

布尔字⾯量包含 true 和 false:

<body>
<!--直接用 true 替换了标签体内容-->
<p th:text="true">布尔</p>
<!--true、false 是布尔值,and 是布尔运行符,and(与),or(或),not(非)、!(非)-->
<p th:text="true and false">true and true</p><!--后台使用 model.addAttribute("isMarry", true); 传了值-->
<!--th:if 表达式为 true,则显示标签内容,否则不显示-->
<p th:if="${isMarry}">已结婚</p><!--后台传值:model.addAttribute("age", 35);-->
<!--比较运算符:>,<,> =,<=(gt,lt,ge,le)-->
<p th:if="${age}>18">已成年</p>
<p th:if="${age}<18">未成年</p>
</body>

NULL 字⾯量

<body>
<p th:text="null">show null</p>
<!--后台传了个值:model.addAttribute("id", null);-->
<!--当 id 的值为 null 时,整个标签不显示-->
<p th:text="${id}">id</p>
<!--相等运算符:==,!=(eq,ne)-->
<p th:if="${id} eq null">id 值为 null</p><!--后台传了个值:model.addAttribute("name", "");-->
<!--当 name 为空时,整个标签不再显示-->
<p th:text="${name}">为空</p>
<!--判断结果为 true-->
<p th:if="${name} == ''">name 为空</p>
</body>

算术运算符

Thyme Leaf 标准表达式⽀持算术运算:+, - ,*,/(除),%(取余)

<body>
<canvas style="background-color: #999999" th:width="100" th:height="${age} + 15">您的浏览器不支持 Canvas
</canvas>
<p th:text="15 * 4">值为 60 </p>
<p th:text="15 * 4-100/10">值为 50 </p>
<p th:text="100 % 8">值为 4</p>
</body>

⽐较/逻辑运算符

表达式中的值可以与 >,<,>= ,<= ,==,!= 符号进⾏⽐较。 ⼀个更简单的替代⽅案是使⽤这些运算符的⽂本别名:gt(>),lt(<),ge(>=),le(<=),eq(==),neq(!=)。

逻辑运算符:and(与)、or(或)、!(非),not(非)
<body>
<p th:if="5>3">5 大于 3</p>
<p th:if="5 >4">5 大于 4</p>
<p th:if="10>=8 and 7 !=8">10大于等于8,且 7 不等于 8 </p>
<p th:if="!false">!false</p>
<p th:if="not(false)">not(false)</p>
</body>

三元运算符

hymeleaf 中的三元运算与 Java 以及 JavaScript 中基本一致,如 A>B?X:Y,在 X、Y 中可以继续嵌套,只是 Thymeleaf 中需要使用括号包含起来,否则报错。

<body>
<!--7大于5时,输出 7大,否则输出 5大-->
<p th:text="7>5?'7大':'5大'">三元运算符</p>
<!--后台控制器输出了:model.addAttribute("age", 35);-->
<!--因为 ${xx}取值时,如果值为null,则默认整个标签不再显示-->
<p th:text="${age}!=null?${age}:'age等于 null'"></p>
<!--这里使用嵌套判断,嵌套的部分要使用括号-->
<p th:text="${age}!=null?(${age}>=18?'成年':'未成年'):'age等于 null'"></p>
<!--变量 age2 后台并没有输出,所以 age2 不存在,此时 age2 ==null-->
<p th:text="${age2}!=null?${age2}:'age2等于 null'"></p><!--后台输出了:model.addAttribute("isMarry", true);-->
<!--A>B?X:Y,这里的 Y 部分是省略的,此时如果 A>B 返回 false,则整个三元运算结果为 null-->
<p th:class="${isMarry}?'css2'">已婚</p>
<p th:text="!${isMarry}?'css2'">已婚</p>
</body>

Thymeleaf 标准表达式语法详解相关推荐

  1. Thymeleaf 标准表达式语法

    本文摘自:Thymeleaf官方文档 简单表达: 变量表达式:${...} 选择变量表达式:*{...} 消息表达式:#{...} 链接 URL 表达式:@{...} 字面量 文本字面量:'one t ...

  2. java 切面详解_Spring AOP 切面表达式语法详解

    简述 由于Spring切面粒度最小是达到方法级别,而execution表达式可以用于明确指定方法返回类型,类名,方法名和参数名等与方法相关的部件,并且在Spring中,大部分需要使用AOP的业务场景也 ...

  3. Thymeleaf语法详解

      本文主要介绍下Thymeleaf的基本使用的语法. Thymeleaf语法详解 1.变量输出与字符串操作 1.1 基本用法 表达式 说明 th:text 在页面中输出值 th:value 可以将一 ...

  4. java8中的lambda表达式实用详解

    java8中的lambda表达式实用详解 1. lambda简介 ​ Lambda 表达式(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中 ...

  5. FreeMarker基本语法详解及模板文件的组成(二)

    海浪上次给大家分享了FreeMarker基本语法详解及模板文件的组成(一)海浪今天继续分享FreeMarker基本语法详解及模板文件的组成(二) 3.2 输出变量值<?xml:namespace ...

  6. Java8初体验(二)Stream语法详解(转)

    本文转自http://ifeve.com/stream/ Java8初体验(二)Stream语法详解 感谢同事[天锦]的投稿.投稿请联系 tengfei@ifeve.com 上篇文章Java8初体验( ...

  7. python编程语法大全-Python编程入门——基础语法详解

    今天小编给大家带来Python编程入门--基础语法详解. 关于怎么快速学python,可以加下小编的python学习群:611+530+101,不管你是小白还是大牛,小编我都欢迎,不定期分享干货 每天 ...

  8. python编程语法-Python编程入门——基础语法详解

    今天小编给大家带来Python编程入门--基础语法详解. 一.基本概念 1.内置的变量类型: Python是有变量类型的,而且会强制检查变量类型.内置的变量类型有如下几种: #浮点 float_num ...

  9. python编程if语法-Python编程入门基础语法详解经典

    原标题:Python编程入门基础语法详解经典 一.基本概念 1.内置的变量类型: Python是有变量类型的,而且会强制检查变量类型.内置的变量类型有如下几种: #浮点 float_number = ...

最新文章

  1. ORB-SLAM2代码/流程详解
  2. 今年,自动驾驶卡车将在无人驾驶的情况下上路
  3. Deep Learning(深度学习)学习笔记整理系列之(五)
  4. flannel源码分析--newSubnetManager
  5. [BTS06]BizTalk2006 SDK阅读笔记(九) 业务活动监控
  6. EhCache缓存学习
  7. php文字红色代码,IOS_IOS中一段文字设置多种字体颜色代码,给定range和需要设置的颜色, - phpStudy...
  8. 解决Required String parameter xxx is not present异常
  9. 计算机如何取消还原卡,如何关闭硬件还原卡?
  10. 英语四级口语考试计算机考吗,四级考试是不是要考口语(英语四级口语考试有必要报名吗?)...
  11. An invalid domain [] was specified for this cookie问题解决方案
  12. 微信公众号的自定义菜单的创建
  13. sqlserver 查询单引号
  14. 深度学习在推荐领域的应用:Lookalike 算法
  15. 服务器android打包,在服务器上使用 gradle 打包 android 源码
  16. 计算死亡率(百分号的输出)
  17. 空间两条直线的最短距离及最近点计算
  18. Android: Jetpack Compose如何禁用涟漪(水波纹)效果
  19. June 8th ipod
  20. Android LeakCanary

热门文章

  1. 几种常用编程语言的编程思想和方法 转
  2. 创建用于存放备份还原文件的网络文件夹(DPM配置管理系列七)
  3. 安装docker-compose for linux
  4. Lifecycle Activity和Fragment生命周期感知组件 LifecycleObserver MD
  5. 初识JavaScript(二)
  6. PayPal API风格指南和设计模式
  7. JavaScript兼容HTML代码的注释
  8. linux学习笔记十二:yum常用命令
  9. 交换一个整数二进制表示中的奇数位和偶数位
  10. C语言实现radon变换