Skip to content

空字面量

空字面量 null 也可直接使用,常用于判断变量/属性是否为空,是 Thymeleaf 中处理空值的核心语法。

html
<div th:if="${variable.something} == null">
  当 variable.something 为空时显示此内容
</div>
核心逻辑解释
  1. 空值判断的场景null 字面量用于检测变量、对象属性或表达式结果是否为 null,常见场景包括:

    • 判断上下文变量是否为空:${user} == null(检查控制器是否传入 user 变量);
    • 判断对象属性是否为空:${user.name} == null(检查 user 对象的 name 属性是否为 null);
    • 结合默认值运算符简化逻辑:${user.name} ?: '匿名用户'(等价于 user.name == null ? '匿名用户' : user.name)。
  2. 写法灵活性: 和布尔字面量类似,空值判断也可写在 ${} 表达式内部(由 OGNL/SpringEL 处理),效果完全一致:

    html
    <!-- 等价写法:null 判断写在表达式内 -->
    <div th:if="${variable.something == null}">
      空值时显示的内容
    </div>
  3. 与空字符串的区别null 表示“变量/属性不存在”,而空字符串 '' 表示“存在但内容为空”,二者不可混淆:

    html
    <!-- 判断是否为 null(不存在) -->
    <div th:if="${user.name} == null">姓名未设置</div>
    <!-- 判断是否为空字符串(存在但无内容) -->
    <div th:if="${user.name} == ''">姓名为空字符串</div>
    <!-- 同时判断 null 和空字符串(推荐用工具对象) -->
    <div th:if="${#strings.isEmpty(user.name)}">姓名为空(null 或空字符串)</div>
关键注意事项
  • null 字面量无需加单引号:加单引号会被解析为文本 "null",而非空值,导致判断失效: ❌ 错误:th:if="${user.name} == 'null'"(仅当 user.name 是字符串 "null" 时才成立,而非真正的 null); ✅ 正确:th:if="${user.name} == null"(判断真正的空值)。
  • 避免空指针异常: 若 variable 本身为 null${variable.something} 会抛出空指针异常,需先判断 variable 是否为空:
    html
    <!-- 安全写法:先判断 variable 非空,再判断 something 为空 -->
    <div th:if="${variable != null && variable.something == null}">
      variable 存在但 something 为空
    </div>

总结

  1. 空字面量 null 用于判断变量/属性是否为空,无需包裹符号,直接与表达式比较;
  2. null 判断可写在 ${} 内部或外部,效果等价,复杂场景推荐写在内部;
  3. 区分 null(不存在)和空字符串 ''(存在但无内容),复杂空值判断推荐使用 #strings.isEmpty() 工具方法;
  4. 避免直接访问可能为 null 的对象的属性,防止空指针异常。