Skip to content

5.6 设置任意属性的值(默认属性处理器)

Thymeleaf 提供了一个默认属性处理器,即便某个 HTML 属性在标准方言中没有对应的专用 th:* 处理器,也能通过它来设置该属性的值。

简单来说,对于任意属性(哪怕是自定义属性),你都可以直接用 th:属性名 的形式赋值,无需依赖 th:attr

html
<!-- 为自定义属性 whatever 赋值,使用默认属性处理器 -->
<span th:whatever="${user.name}">...</span>

如果 ${user.name} 的值是 John Apricot,处理后会生成:

html
<span whatever="John Apricot">...</span>

关键说明

  1. 覆盖范围:默认属性处理器适配所有未定义专用 th:* 修饰符的属性,包括:
    • HTML 原生但 Thymeleaf 未提供专用修饰符的属性;
    • 完全自定义的属性(如 data-*whatever 等)。
  2. 写法优势:相比 th:attr="whatever=${user.name}"th:whatever="${user.name}" 写法更直观、简洁,和专用属性修饰符(如 th:class)的语法保持一致。
  3. 自定义属性场景示例
    html
    <!-- 设置自定义数据属性(替代 th:attr="data-user-id=${user.id}") -->
    <div th:data-user-id="${user.id}" th:data-role="${user.role}">
      用户信息
    </div>
    处理后输出:
    html
    <div data-user-id="1001" data-role="admin">
      用户信息
    </div>

总结

  1. 默认属性处理器让 Thymeleaf 支持 th:任意属性名 的语法,无需为自定义/小众属性单独使用 th:attr
  2. 语法规则和专用属性修饰符一致:th:目标属性名="${表达式}",最终会渲染为 目标属性名="表达式结果"
  3. 自定义属性(如 data-*)优先使用 th:属性名 写法,而非 th:attr,代码可读性更高。