Skip to content

字面量标记

数字、布尔和空字面量其实是字面量标记的特殊情况。

这类标记能简化标准表达式的写法,其作用和文本字面量('...')完全一致,但仅允许包含特定字符:字母(A-Z、a-z)、数字(0-9)、方括号([/])、点(.)、连字符(-)和下划线(_)。不允许包含空格、逗号等其他字符

最便捷的点在于:字面量标记无需用单引号包裹。例如:

html
<!-- 字面量标记写法(简化) -->
<div th:class="content">...</div>

<!-- 等价的文本字面量写法(需单引号) -->
<div th:class="'content'">...</div>
核心规则解释
  1. 适用场景与字符限制

    • 仅当字符串仅包含允许的字符(字母、数字、[].-_)时,才能省略单引号作为“字面量标记”;
    • 若包含空格、逗号、单引号等特殊字符,必须用单引号包裹为普通文本字面量: ❌ 错误:th:class="content main"(包含空格,无法作为字面量标记); ✅ 正确:th:class="'content main'"(用单引号包裹含空格的字符串)。
  2. 与其他表达式的兼容: 字面量标记可和变量表达式、运算等结合使用,逻辑与文本字面量一致:

    html
    <!-- 结合变量:为不同用户类型设置不同类名 -->
    <div th:class="user-${user.type}">...</div>
    <!-- 等价于 th:class="'user-' + ${user.type}" -->
  3. 常见使用场景: 字面量标记最常用于设置 HTML 标签的属性值(如 classidname 等),这些属性值通常仅包含字母、数字、连字符/下划线,非常适合简化写法:

    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 属性值。

总结

  1. 字面量标记是文本字面量的简化写法,无需单引号,但仅允许包含字母、数字、[].-_
  2. 包含空格、逗号等特殊字符的字符串,必须用单引号包裹为普通文本字面量;
  3. 常用于设置 classid 等属性值,能简化代码,但需注意与变量表达式的区分(避免把 user.name 误认成变量)。