(二)Thymeleaf标准表达式之——简单表达式
2. 标准表达式(Standard Expression Syntax)
标准表达式包含以下几个方面:
- 简单表达式:
- 变量表达式:
${...} - 选择变量表达式:
*{...} - 消息表达式:
#{...} - 链接网址表达式:
@{...} - 片段表达式:
~{...}
- 变量表达式:
- 字面
- 文本文字:
'one text','Another one!',... - 数字文字:
0,34,3.0,12.3,... - 布尔文字:
true,false - 空字面:
null - 文字标记:
one,sometext,main,...
- 文本文字:
- 文字操作:
- 字符串连接:
+ - 文字替代:
|The name is ${name}|
- 字符串连接:
- 算术运算:
- 二元运算符:
+,-,*,/,% - 减号(一元运算符):
-
- 二元运算符:
- 布尔运算:
- 二元运算符:
and,or - 布尔否定(一元运算符):
!,not
- 二元运算符:
- 比较和相等:
- 比较:
>,<,>=,<=(gt,lt,ge,le) - 相等判断:
==,!=(eq,ne)
- 比较:
- 条件运算符:
- IF-THEN:
(if) ? (then) - IF-THEN-ELSE:
(if) ? (then) : (else) - 默认:
(value) ?: (defaultvalue)
- IF-THEN:
- 特殊令牌:
- 无操作:
下面将分别介绍:
2.1 简单表达式
2.1.1变量表达式:${...}
1. Established locale country: <span th:text="${#locale.country}">US</span>
2. <p> Today is: <span th:text="${#calendars.format(today,'dd MMMM yyyy')}">13 May 2011</span></p>
① Expression Basic Objects (表达式基本对象)
#符号开始:#ctx:上下文对象。#vars:上下文变量。#locale:上下文区域设置。#request:(仅在Web上下文中)HttpServletRequest对象。#response:(仅在Web上下文中)HttpServletResponse对象。#session:(仅在Web上下文中)HttpSession对象。#servletContext:(仅在Web上下文中)ServletContext对象。
示例:
Established locale country: <span th:text="${#locale.country}">US</span>.
② Expression Utility Objects(表达式实用对象)
除了这些基本的对象之外,Thymeleaf将为我们提供一组实用对象,这些对象将帮助我们在表达式中执行常见任务。
#execInfo:有关正在处理的模板的信息。#messages:在变量表达式中获取外部化消息的方法,与使用#{...}语法获得的方式相同。#uris:转义URL / URI部分的方法#conversions:执行配置的转换服务(如果有)的方法。#dates:java.util.Date对象的方法:格式化,组件提取等#calendars:类似于#dates但是java.util.Calendar对象。#numbers:用于格式化数字对象的方法。#strings:String对象的方法:contains,startsWith,prepending / appending等#objects:一般对象的方法。#bools:布尔评估的方法。#arrays:数组方法。#lists:列表的方法。#sets:集合的方法。#maps:地图方法。#aggregates:在数组或集合上创建聚合的方法。#ids:处理可能重复的id属性的方法(例如,作为迭代的结果)。
2.1.2选择性/星号表达式:*{...}
不仅可以将变量表达式写为${...},也可以写为*{...}。
有一个重要的区别:星号语法评估所选对象而不是整个上下文的表达式。也就是说,只要没有选定的对象,美元和星号语法就会完全相同。
<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>
equals.
<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>
2.1.3 消息表达式:#{...}
<p th:utext="#{home.welcome}">Welcome to our grocery store!</p>
2.1.4 链接表达式:@{...}

<!-- 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>
下面针对不同类型网址做一详细介绍
①.绝对URL(Absolute URLs) 开始通过指定协议名称(包含http://或https://开头)
e.g.
<a th:href="@{http://www.thymeleaf/documentation.html}"></a>
equals:
<a href="http://www.thymeleaf/documentation.html"></a>
②. 上下文相关的URL(Context-relative URLs) 最常用的如应用程序myapp的访问地址:http://localhost:8080/myapp,那么myapp就是上下文名称。
e.g.<a th:href="@{/order/list}"></a>
equals:<a href="/myapp/order/list"></a>
说明:“/”表示从应用程序根路径开始访问 ,去掉“/”表示相对路径
③.相对于服务器的URL(Server-relative URLs) 用法类似2,连接到同一服务器不同应用程序中
e.g.
<a th:href="@{~/billing-app/showDetails.htm}"></a>
equals:
<a href="/billing-app/showDetails.htm"></a>
note:当前应用程序的上下文myapp将被忽略
④.协议相对URL(Protocol-relative URLs) 通常用于,包括外部资源,如样式,脚本等。保证协议(HTTP,HTTPS)用于显示当前页面的绝对URL。
e.g.
<script th:src="@{//scriptserver.example.net/myscript.js}">...</script>
equals:
<script src="//scriptserver.example.net/myscript.js">...</script>
⑤.带参数的URL表达式
e.g.
1.<a th:href="@{/order/details(id=3)}"></a>
equals:
<a href="/order/details?id=3"></a>
2.携带多参数:<a th:href="@{/order/details(id=3,action='show_all')}"></a>
equals:
<a href="/order/details?id=3&action=show_all"></a>
2.1.5 片段表达式:~{...}
片段表达式的语法是非常简单的。有三种不同的格式:
"~{templatename::selector}"包含在命名的模板上应用指定的标记选择器导致的片段templatename。请注意,selector可以只是一个片段名称,所以你可以指定~{templatename::fragmentname}像~{footer :: copy}上面那样简单的东西。
标记选择器语法由底层的AttoParser解析库定义,类似于XPath表达式或CSS选择器。
"~{templatename}"包括完整的模板命名templatename。
请注意,您在th:insert/ th:replacetags中使用的模板名称必须由Template Engine当前使用的Template Resolver解析。
~{::selector}"或"~{this::selector}"包含同一模板的片段。
双方templatename并selector在上面的例子可以是全功能的表达式(甚至条件语句!),如:
<div th:insert="footer :: (${user.isAdmin}? #{footer.admin} : #{footer.normaluser})"></div>
片段可以包括任何th:*属性。一旦片段被包含在目标模板(具有th:insert/ th:replaceattribute)的模板中,这些属性将被评估,并且它们将能够引用此目标模板中定义的任何上下文变量。
这种分片方法的一大优点是,您可以将页面中的片段写入浏览器完美显示的页面,并具有完整而有效的标记结构,同时仍保留使Thymeleaf包含在其他模板中的功能。
(二)Thymeleaf标准表达式之——简单表达式的更多相关文章
- 初步认识Thymeleaf:简单表达式和标签。(一)
本文只适用于不会Java对HTML语言有基础的程序员们,是浏览了各大博客后收集整理,重新编辑的一篇文章,希望能对大家有所帮助. 对于Thymeleaf,网上特别官方的解释无非就是:网站或者独立应用程序 ...
- 初步认识thymeleaf:简单表达式和标签(一)
初步认识Thymeleaf:简单表达式和标签.(一) 本文只适用于不会Java对HTML语言有基础的程序员们,是浏览了各大博客后收集整理,重新编辑的一篇文章,希望能对大家有所帮助.最后本文如果有哪 ...
- 认识Thymeleaf:简单表达式和标签 基础信息
转载:https://www.cnblogs.com/beyrl-blog/p/6633182.html 本文只适用于不会Java对HTML语言有基础的程序员们,是浏览了各大博客后收集整理,重新编辑的 ...
- Thymeleaf标准表达式
Thymeleaf的官网为: http://www.thymeleaf.org/ 一.变量表达式${-} 使用${-}括起来的表达式,称为变量表达式.该表达式的内容会显示在HTML标签体文本处. 该表 ...
- Thymeleaf 标准表达式语法
变量表达式${ } 在控制器中往页面传递几个变量: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 @Controller public class IndexController ...
- EL表达式的简单介绍
EL表达式的简单介绍 一.JSP EL语言定义 E L(ExpressionLanguage) 目的:为了使JSP写起来更加简单. 表达式语言的灵感来自于ECMAScript 和 XPath 表达式 ...
- 栈的简单应用之中缀表达式转后缀表达式(C语言实现逆波兰式)
一.前言 普通人在书写计算式时会选择中缀表达式,这样符合人脑的认知习惯.可计算机处理时后缀表达式才能使处理速度更快,其原因是利用堆栈结构减少计算机内存访问.同时它也是一个很好锻炼栈这个数据结构的应 ...
- 从零开始的Spring Boot(6、Thymeleaf内置对象及表达式大全)
1.1 基础对象 #ctx:上下文对象 ${#ctx.locale} ${#ctx.variableNames} ${#ctx.request} ${#ctx.response} ${#ctx.ses ...
- Qt计算器开发(二):信号槽实现数学表达式合法性检查
表达式的合法性 由于我们的计算器不是单步计算的,所以我们能够一次性输入一个长表达式.然而假设用户输入的长表达式不合法的话,那么就会引发灾难.所以有必要对于用户的输入做一个限制. 一些限制举例: 比方, ...
随机推荐
- 函数atof,atoi,atol,strtod,strtol,strtoul 描述
函数atof,atoi,atol,strtod,strtol,strtoul atof(将字串转换成浮点型数) 相关函数 atoi,atol,strtod,strtol,strtoul表头文件 #in ...
- (二十七)Linux的inode的理解
一.inode是什么? 理解inode,要从文件储存说起. 文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector).每个扇区储存512字节(相当于0.5KB). 操作系统 ...
- 【计算机网络】简单网络管理协议 SNMP
计算机网络 6.7节学习笔记 SNMP: 管理网络上的对象时,必然会给该对象添加一些软件或硬件,但这种添加必须对原有对象的影响尽量小. SNMP中的管理程序和代理程序按客户-服务器方式工作.管理程序 ...
- chanme的博客搬家了!
一直以来都想自己租一台服务器,买个域名做一个自己的博客,但是由于时间和知识的关系,以前还不太知道怎么搭一个博客.终于我在上个礼拜成功的迈出了建站的第一步,然后陆陆续续的也将一些后续的步骤做好了.所以今 ...
- 【原创】Talend ETL开发——基于joblet的统一的email发送
更新 2019/1/16:增加了允许5个附件发送.smtp等配置的字段. 一.背景 在ETL数据整合过程中,肯定会涉及到email的通知,比如ETL的执行情况汇报,执行耗时汇报,关键数据更新情况等信息 ...
- VirtualBox安装部署的Ubuntu16.04的步骤
1.下载ubuntu16.04镜像 http://cn.ubuntu.com/download/ 以及虚拟机软件VirtualBox https://www.virtualbox.org/wiki/D ...
- PHP使用AJax轮询实现新订单实时提醒
业务逻辑:Ajax每隔10秒钟请求一次接口,该接口会去查询数据库是否有新的订单,如果有则返回新订单的数量,后台收到声音提示,更改后台提醒数量 提醒框可链接到订单列表,后台更改完订单状态后会提醒会消失 ...
- Reporting Services 的一些问题
做报表有一段时间,感觉Reporting Services还是比较麻烦的,因为网上的例子有的比较少,很多地方都需要自己摸索,说说我遇到的一些问题 1:页首的设计 一些固定显示的资料放在页首里面比较方便 ...
- Matlab与C++混合编程,添加OpenCV库
最近在做运动医学软件优化工作,此款软件框架及算法语言全由matlab实现,虽然matlab矩阵运算.数值计算能力强大,但速度让人难以忍受.软件立刻移植到C++上又不太实际,故采用联合编程的方式,速度难 ...
- Js 利用正则表达式和replace函数获取string中所有被匹配到的文本
js的replace函数除了替换文本以外还有获取所有被正则表达式匹配到的文本的功能.这里以一个简单的案例来作为演示. 利用正则查找出所有被两个花括号包裹的字符串: var str = '<div ...