2. 标准表达式(Standard Expression Syntax)

标准表达式包含以下几个方面:

  • 简单表达式:

    • 变量表达式: ${...}
    • 选择变量表达式: *{...}
    • 消息表达式: #{...}
    • 链接网址表达式: @{...}
    • 片段表达式: ~{...}
  • 字面
    • 文本文字:'one text''Another one!',...
    • 数字文字:0343.012.3,...
    • 布尔文字:truefalse
    • 空字面: null
    • 文字标记:onesometextmain,...
  • 文字操作:
    • 字符串连接: +
    • 文字替代: |The name is ${name}|
  • 算术运算:
    • 二元运算符:+-*/%
    • 减号(一元运算符): -
  • 布尔运算:
    • 二元运算符:andor
    • 布尔否定(一元运算符): !not
  • 比较和相等:
    • 比较:><>=<=gtltgele
    • 相等判断:==!=eqne
  • 条件运算符:
    • IF-THEN: (if) ? (then)
    • IF-THEN-ELSE: (if) ? (then) : (else)
    • 默认: (value) ?: (defaultvalue)
  • 特殊令牌:
    • 无操作:

下面将分别介绍:

2.1 简单表达式

2.1.1变量表达式:${...}

模板名称:var.html   原理类似OGNL/SpringEL表达式
e.g.
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  (表达式基本对象)

当对上下文变量评估OGNL表达式时,某些对象可用于表达式以获得更高的灵活性。这些对象将被引用(按照OGNL标准),从#符号开始:
  • #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:执行配置的转换服务(如果有)的方法。
  • #datesjava.util.Date对象的方法:格式化,组件提取等
  • #calendars:类似于#dates但是java.util.Calendar对象。
  • #numbers:用于格式化数字对象的方法。
  • #stringsString对象的方法:contains,startsWith,prepending / appending等
  • #objects:一般对象的方法。
  • #bools:布尔评估的方法。
  • #arrays:数组方法。
  • #lists:列表的方法。
  • #sets:集合的方法。
  • #maps:地图方法。
  • #aggregates:在数组或集合上创建聚合的方法。
  • #ids:处理可能重复的id属性的方法(例如,作为迭代的结果)。

2.1.2选择性/星号表达式:*{...}

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

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

模板名称:star.html
e.g.
 <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 消息表达式:#{...}

模板名称:message.html message 国际化支持 语法格式:#{  }
e.g.
<p th:utext="#{home.welcome}">Welcome to our grocery store!</p>

2.1.4 链接表达式:@{...}

模板名称:link.html
语法格式:@{  }
示例:
<!-- 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}"包含同一模板的片段。

双方templatenameselector在上面的例子可以是全功能的表达式(甚至条件语句!),如:

<div th:insert="footer :: (${user.isAdmin}? #{footer.admin} : #{footer.normaluser})"></div>

片段可以包括任何th:*属性。一旦片段被包含在目标模板(具有th:insertth:replaceattribute)的模板中,这些属性将被评估,并且它们将能够引用此目标模板中定义的任何上下文变量。

这种分片方法的一大优点是,您可以将页面中的片段写入浏览器完美显示的页面,并具有完整而有效的标记结构,同时仍保留使Thymeleaf包含在其他模板中的功能。

(二)Thymeleaf标准表达式之——简单表达式相关推荐

  1. Thymeleaf 标准表达式语法详解

    Thymeleaf 表达式汇总 首先先加入命名空间 <html xmlns:th="http://www.thymeleaf.org"> 编号 属性 描述 示例 1 $ ...

  2. java th标签_初步认识Thymeleaf:简单表达式和标签。(一)

    本文只适用于不会Java对HTML语言有基础的程序员们,是浏览了各大博客后收集整理,重新编辑的一篇文章,希望能对大家有所帮助.最后本文如果有哪里写错的,希望各位大神们能够批评指正,谢谢大家! 对于Th ...

  3. Thymeleaf 标准表达式语法

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

  4. thymeleaf表达式优先级及表达式简单说明

    thymeleaf表达式优先级: 表达式简单说明: th:insert 片段包含 th:replace 片段替换 th:each 遍历 th:if 条件判断 th:unless th:switch t ...

  5. jsp脚本、jsp标准动作、EL表达式、JSTL标签

    https://blog.csdn.net/gx_hxl/article/details/79032331 https://blog.csdn.net/a731604348/article/detai ...

  6. php有lambda表达式吗,Python中lambda表达式的简单介绍(附示例)

    本篇文章给大家带来的内容是关于Python中lambda表达式的简单介绍(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 一:匿名函数的定义 lambda parameter ...

  7. 中缀表达式转换成前缀表达式和后缀表达式的极其简单方法

    35,15,+,80,70,-,*,20,/ //后缀表达方式 (((35+15)*(80-70))/20)=25 //中缀表达方式 /,*,+,35,15,-,80,70, 20 //前缀表达方式 ...

  8. Qt计算器开发(二):信号槽实现数学表达式合法性检查

    表达式的合法性 由于我们的计算器不是单步计算的,所以我们能够一次性输入一个长表达式.然而假设用户输入的长表达式不合法的话,那么就会引发灾难.所以有必要对于用户的输入做一个限制. 一些限制举例: 比方, ...

  9. boost::proto模块实现构建算术表达式的简单示例 带有占位符的评估器的测试程序

    boost::proto模块实现构建算术表达式的简单示例带有占位符的评估器的测试程序 实现功能 C++实现代码 实现功能 boost::proto模块实现构建算术表达式的简单示例带有占位符的评估器的测 ...

最新文章

  1. 第十九课.隐马尔科夫模型
  2. 怎么样在c#程序中放音乐
  3. Android 中三种启用线程的方法
  4. 一个aov网用邻接矩阵表示_关注讲述我和朱婷7年7个故事,见证一个明星代表的诞生...
  5. DataSourceUtils(使用C3P0连接池的工具类)
  6. 电机串电阻会有什么影响?
  7. [HAOI2008]玩具取名
  8. 全面永久退出!又一巨头被逼上绝路!
  9. python中如何统计元组中元素的个数_python-无论元素顺序如何,获取列表中的元组数...
  10. layui怎样将响应数据展示在页面_layui怎么对弹出层显示数据
  11. Hive数据导出的几种方式
  12. python学习第十八天 --文件操作
  13. 基于 EMD 和小波包的降噪方法研究
  14. 小牛M+怎么样 看过你才知道
  15. [CTF]CTFSHOW文件包含练习笔记
  16. 微信小程序------API
  17. P1978 集合 (set)
  18. 主机和虚拟机实现复制粘贴功能
  19. R循环有两个_海德汉数控系统G代码、M代码、循环大全
  20. 痞子衡嵌入式:我被邀请做科锐国际旗下数科同道主办的技术沙龙嘉宾

热门文章

  1. python批量读取文件夹中的所有excel文件-python遍历文件夹下所有excel文件
  2. 初学python还是swift-Python并不完美,Swift正在成长为深度学习语言 !
  3. python学精通要多久-零基础零经验自学Python,到精通Python要多久啊?
  4. python爬虫项目-33个Python爬虫项目实战(推荐)
  5. python怎么读excel文件-python 读取excel文件
  6. python培训班价格-上海Python培训学费价格是多少
  7. python怎么学最快-人工智能Python开发怎么学才能最快入门
  8. python爬虫教程推荐-33个Python爬虫项目实战(推荐)
  9. linux上添加下载源的时候报错:无法添加 PPA:“‘此 PPA 不支持 bionic‘”,以及关于linuxPPA的介绍,如何查找软件包的PPA源,并添加PPA
  10. Contest Leaderboard(分组、聚合、连接)