深色模式
字面量标记
数字、布尔和空字面量其实是字面量标记的特殊情况。
这类标记能简化标准表达式的写法,其作用和文本字面量('...')完全一致,但仅允许包含特定字符:字母(A-Z、a-z)、数字(0-9)、方括号([/])、点(.)、连字符(-)和下划线(_)。不允许包含空格、逗号等其他字符。
最便捷的点在于:字面量标记无需用单引号包裹。例如:
html
<!-- 字面量标记写法(简化) -->
<div th:class="content">...</div>
<!-- 等价的文本字面量写法(需单引号) -->
<div th:class="'content'">...</div>核心规则解释
适用场景与字符限制:
- 仅当字符串仅包含允许的字符(字母、数字、
[]、.、-、_)时,才能省略单引号作为“字面量标记”; - 若包含空格、逗号、单引号等特殊字符,必须用单引号包裹为普通文本字面量: ❌ 错误:
th:class="content main"(包含空格,无法作为字面量标记); ✅ 正确:th:class="'content main'"(用单引号包裹含空格的字符串)。
- 仅当字符串仅包含允许的字符(字母、数字、
与其他表达式的兼容: 字面量标记可和变量表达式、运算等结合使用,逻辑与文本字面量一致:
html<!-- 结合变量:为不同用户类型设置不同类名 --> <div th:class="user-${user.type}">...</div> <!-- 等价于 th:class="'user-' + ${user.type}" -->常见使用场景: 字面量标记最常用于设置 HTML 标签的属性值(如
class、id、name等),这些属性值通常仅包含字母、数字、连字符/下划线,非常适合简化写法:html<!-- 设置 id:无需单引号 --> <input th:id="username-input" type="text"> <!-- 设置 name:无需单引号 --> <input th:name="user[0].email" type="email">
易混淆场景对比
| 写法 | 是否合法 | 原因 |
|---|---|---|
th:class="content" | ✅ 合法 | 仅含字母,符合字面量标记规则 |
th:class="content-1" | ✅ 合法 | 含字母和连字符,符合规则 |
th:class="content 1" | ❌ 非法 | 含空格,需用单引号包裹为 'content 1' |
th:class="user.name" | ✅ 合法 | 含字母和点,符合规则(但注意:这是字符串 "user.name",而非变量 ${user.name}) |
重要提醒:
th:class="user.name"中的user.name是字符串字面量标记,而非变量表达式${user.name},二者完全不同:
th:class="user.name"→ 最终 class 为user.name;th:class="${user.name}"→ 最终 class 为user对象的name属性值。
总结
- 字面量标记是文本字面量的简化写法,无需单引号,但仅允许包含字母、数字、
[]、.、-、_; - 包含空格、逗号等特殊字符的字符串,必须用单引号包裹为普通文本字面量;
- 常用于设置
class、id等属性值,能简化代码,但需注意与变量表达式的区分(避免把user.name误认成变量)。
