spring el表达式 if else_Thymeleaf参考手册(四):标准表达式语法(三)
片段片段表达式提供了模板共用的简便方法,同时还可以作为参数传递给其它模板。最常见的用途是使用 th:insert 或 th:replace 进行片段插入:<同时,它们可以像其他任何变量一样,在任意地方使用:<关于其详细用法,后续会通过“模板布局”章节,系统地介绍其语法。字面量文本字面量文本常量是指单引号之间指定的字符串。可以包含任何字符,但是需要使用 ' 对单引号进行转义。<&l
片段
片段表达式提供了模板共用的简便方法,同时还可以作为参数传递给其它模板。
最常见的用途是使用 th:insert 或 th:replace 进行片段插入:
<
同时,它们可以像其他任何变量一样,在任意地方使用:
<
关于其详细用法,后续会通过“模板布局”章节,系统地介绍其语法。
字面量
文本字面量
文本常量是指单引号之间指定的字符串。可以包含任何字符,但是需要使用 ' 对单引号进行转义。
<
<
数字字面量
数字常量就是日常中的数字。
<
布尔字面量
布尔常量即 true 和 false。
<
在此样例中,== false 判断是写在花括号外面的,因此,Thymeleaf引擎将负责处理。如写在花括号里面,则OGNL/SpringEL引擎将负责解析。
<
空字面量
空常量即 null。
<
字面量标记
数字、布尔和空字面量实际上是字面量的特殊情况。
这些标记允许在标准表达式中进行一些简化。它们的工作原理与文本字面量('...')完全相同,但是它们仅允许使用字母(A-Z 和 a-z),数字(0-9),方括号([ 和 ]),点(.),连字符(-)和下划线(_)。因此,没有空格,没有逗号等。
要说有点?那就是标记不需要使用任何引号括起来,因此,可以这么做:
<
以代替:
<
文本追加
无论是字面量,还是评估表达式或信息表达式的结果,都可以使用 + 运算符轻松追加文本。
<
文字替换
文字替换可以轻松格式化包含变量值的字符串,而无需在文字后面附加 '...' + '...'。但这些替换项必须用竖线(|)包围,例如:
<
其等价于:
<
文字替换还可以与其它类型的表达式结合使用:
<
注意,只有变量/消息表达式(${...},*{...},#{...})允许嵌套在|...| 中。其它如字面量('...'),布尔/数字标记,条件表达式等均不允许。
算数运算
一些算数运算也是可用的,如 +,-, *, / 和 %。
<
请注意,这些运算符也可以在OGNL变量表达式内部应用(在这种情况下,将由OGNL代替Thymeleaf标准表达式引擎解析):
<
注意,其中一些运算符存在文本别名:div(/),mod(%)。
比较和相等
表达式中的值,可以使用 >,<,>=,<= 符号进行比较,而 == 和 != 则可以用来判断是否相等。注意,xml规范规定,不允许属性值使用 < 和 > 符号,因此应使用 < 和 > 代替。
<
还有一种更简单的替代方法,就是使用以下这些运算符的文本别名:gt(>),lt(<),ge(>=),le(<=),not(!)。还有 eq(==),neq / ne(!=)。
条件表达式
条件表达式旨在仅根据两个条件的求值结果来求值(其本身就是另一个表达式)。
看一个例子吧:
<
条件表达式的所有三个部分(condition,then 和 else)本身的表达式,这意味着它们可以是变量(${...},*{...}),消息(#{...}),网址(@{...})或文字('...')。
也可以使用括号嵌套条件表达式:
<
Else 表达式也可以省略,在这种情况下,如果条件为 false,则返回 null 值:
<
默认表达式(Elvis运算符)
默认表达式是一种没有 then 部分的特殊的条件值。它相当于某些预研(如groovy)中的elvis运算符,允许指定两个表达式,如果第一个表达式的计算结果不为null,则使用第一个表达式;如果为null,则使用第二个表达式。
示例:
<
如您所见,其运算符为 ?:,并且仅当 *{age} 值结果为null时,才在此处使用它来指定名称的默认值(在这种情况下为文字值)。因此,这等效于:
<
与条件值一样,它们可以在括号之间包含嵌套表达式:
<
无操作标记
No-Operation标记由下划线符号(_)表示。
该标记旨在标识指定表达式的期望结果是什么也不做,即完全就像可处理属性(例如 th:text)根本不存在一样。
除其它可能性外,这还使开发人员可以将原型文本用作默认值。例如:
<
其替代方案为,将 'no user authenticated' 字符串用作原型文本,从设计角度来说,这使代码既简洁又通用。
<
数据转换/格式化
Thymeleaf 为变量表达式(${...})和选择变量表达式(*{...})表达式定义了双括号语法,使我们能够通过配置的转换服务来进行数据转换。如:
<
其中,双括号 ${{...}} 的作用即为指示Thymeleaf将 user.lastAccessDate 表达式的结果传递给转换服务,并要求它执行格式操作(将转换为String),然后再写入结果。
假设 user.lastAccessDate 类型为 java.util.Calendar,如果已注册转换服务(IStandardConversionService的实现)并且包含Calendar -> String的有效转换,则将会被应用。
IStandardConversionService的默认实现(StandardConversionService类)只是简单的使用 .toString() 将任何对象转换为String。
官方的thymeleaf-spring3和thymeleaf-spring4集成软件包将Thymeleaf的转换服务机制与Spring自己的转换服务基础结构透明地集成在一起,以便在Spring配置中声明的转换服务和格式化程序将自动提供给 ${{...}} 和 *{{...}} 表达式。
预处理
除了用于表达式处理的所有这些功能之外,Thymeleaf还具有预处理表达式的功能。
预处理是在普通表达式执行之前的执行的表达式,该表达式允许修改最终将要执行的表达式。
预处理表达式与普通表达式完全一样,但是出现了一个双下划线符号(如__${expression}__)。
假设我们有一个i18n Messages_fr.properties条目,其中包含一个OGNL表达式,该表达式调用特定于语言的静态方法,例如:
article.text=@myapp.translator.Translator@translateToFrench({0})
同样的 Messages_es.properties。
article.text=@myapp.translator.Translator@translateToSpanish({0})
我们可以创建一个标记片段,该片段根据语言环境评估一个表达式或另一个表达式。为此,我们将首先选择表达式(通过预处理),然后让Thymeleaf执行它:
<
请注意,法语语言环境的预处理步骤将创建以下等效项:
<
预处理字符串 __ 在属性中可以使用 __ 来进行转义。
我是银河架构师,十年饮冰,难凉热血,愿历尽千帆,归来仍是少年!
如果文章对您有帮助,请举起您的小手,轻轻【三连】,这将是笔者持续创作的动力源泉。当然,如果文章有错误,或者您有任何的意见或建议,请留言。感谢您的阅读!
文章不定时更新,可微信搜索「银河架构师」,精彩内容,先睹为快!
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)