深色模式
4 标准表达式语法
在继续开发虚拟杂货店应用前,我们先暂停一下,学习 Thymeleaf 标准方言(Standard Dialect)中最重要的部分:Thymeleaf 标准表达式语法。
我们已经见过该语法支持的两种合法属性值类型:消息表达式和变量表达式:
html
<p th:utext="#{home.welcome}">Welcome to our grocery store!</p>
<p>Today is: <span th:text="${today}">13 february 2011</span></p>但表达式的类型远不止这些,我们已知的表达式也还有更多有趣的细节值得学习。首先,快速梳理一下标准表达式的核心特性:
1. 简单表达式
- 变量表达式:
${...} - 选择变量表达式:
*{...} - 消息表达式:
#{...} - 链接 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) - 默认值(Elvis 运算符):
(value) ?: (defaultvalue)
8. 特殊标记
- 无操作:
_
所有这些特性都可以组合嵌套使用,例如:
thymeleaf
'User is of type ' + (${user.isAdmin()} ? 'Administrator' : (${user.type} ?: 'Unknown'))核心语法解释
- 表达式类型的核心用途:
${...}:访问上下文变量(控制器传入的动态数据);*{...}:基于当前选中对象的变量访问(后续章节详解);#{...}:读取国际化消息;@{...}:生成 URL(自动拼接上下文路径);~{...}:引用模板片段(用于布局复用)。
- 字面量替换的便捷性:
|The name is ${name}|等价于'The name is ' + ${name},语法更简洁,适合拼接包含变量的文本。 - 符号别名的意义: 如
gt(>)、eq(==),是为了兼容 XML 规范(XML 中<、>` 等符号有特殊含义,直接使用会报错)。 - 默认值运算符(?:):
${user.type} ?: 'Unknown'表示“如果user.type不为 null/空,则使用其值,否则使用Unknown”,简化空值判断。 - 无操作令牌(_): 使用
_时,Thymeleaf 会保留标签的默认文本,不做任何替换(后续章节详解)。
总结
- Thymeleaf 标准表达式语法覆盖了变量访问、文本操作、运算、条件判断等全场景需求,是模板动态渲染的核心。
- 不同类型的表达式(
${}/#{}/@{}等)各司其职,分别处理动态变量、国际化、URL 生成等场景。 - 表达式支持组合嵌套,能通过简洁的语法实现复杂的逻辑判断,同时提供符号别名、字面量替换等特性适配不同场景(如 XML 兼容)。
