深色模式
4.8 字面量替换
字面量替换(Literal substitutions)提供了一种简洁的方式来格式化包含变量值的字符串,无需通过 '...' + '...' 的方式拼接文本和变量。
这类替换必须用竖线 | 包裹,语法示例如下:
html
<span th:text="|Welcome to our application, ${user.name}!|">
Welcome to our application, Guest!
</span>这段代码完全等价于使用 + 拼接的写法:
html
<span th:text="'Welcome to our application, ' + ${user.name} + '!'">
Welcome to our application, Guest!
</span>字面量替换可以和其他类型的表达式(如纯变量表达式、文本拼接)结合,灵活构建复杂文本:
html
<!-- 组合变量表达式 + 文本拼接 + 字面量替换,结果如 "Hello John, 28 years old!" -->
<span th:text="${onevar} + ' ' + |${twovar}, ${threevar}|">
</span>关键注意事项
严格的表达式类型限制:
|...|内部仅允许使用变量表达式(${...}/*{...})和消息表达式(#{...}),不支持以下内容:- 文本字面量(
'...'):❌|'Hello' ${user.name}| - 布尔/数字字面量:❌
|${user.age} + 2|、❌|${user.isAdmin()} == true| - 条件表达式:❌
|${user.age} ?: 18| - 空格外的特殊运算:❌
|${user.score} * 100|
✅ 合法示例:
html<!-- 变量表达式 + 消息表达式 --> <span th:text="|#{home.welcome}, ${user.name} (${user.id})|"> Welcome, Guest (0) </span>- 文本字面量(
空格与特殊字符支持:
|...|内部可自由使用空格、标点等字符,无需额外转义(只要这些字符不属于表达式语法):html<!-- 包含逗号、空格、感叹号,合法 --> <span th:text="|Dear ${user.name}, your order #${order.id} is ready!|"> Dear Guest, your order #0 is ready! </span>
字面量替换 vs 文本拼接
| 特性 | 字面量替换(|...|)| 文本拼接(+)| |---------------------|---------------------------------|---------------------------------| | 语法简洁性 | 高(无需频繁写单引号和 +)| 低(需手动拼接单引号和 +)| | 支持的表达式类型 | 仅 ${...}/*{...}/#{...} | 所有类型(文本、变量、运算等)| | 适用场景 | 简单的“文本+变量”组合 | 复杂的多段拼接/运算组合 |
总结
- 字面量替换
|...|是 Thymeleaf 简化“文本+变量/消息表达式”拼接的语法糖,比+更简洁易读; - 核心限制:
|...|内部仅支持变量/消息表达式,不支持文本/布尔/数字字面量、运算、条件表达式等; - 简单拼接优先用字面量替换,复杂逻辑(含运算、条件)仍需用
+拼接或拆分表达式。
