You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Thymeleaf 2.1.6下body标签th:data-*属性无法渲染如何解决?

问题原因

Thymeleaf 2.1.x 版本未内置 th: 前缀对自定义 data-* 属性的自动映射支持,该特性是 Thymeleaf 3.0 版本才新增的能力。因此只有 title 这类 Thymeleaf 2.x 内置预定义的属性前缀可以正常渲染,你写的自定义 th:data-* 属性无法被识别解析。

适配方案

可通过以下两种方案实现兼容,无需改回高版本 Thymeleaf:

方案1:使用 th:attr 统一声明自定义属性(推荐,改动成本最低)

这是 Thymeleaf 2.x 官方提供的自定义属性绑定标准写法,修改 body 标签代码如下:

<body 
  th:title="${key}" 
  th:attr="data-key=${key},data-rol=${rol},data-iden=${iden}"
>

多个自定义属性用英文逗号分隔即可,渲染后会自动生成对应的 data-key、data-rol、data-iden 属性和变量值,完全符合你的原有需求。
该方案适合项目模板数量较少,改动工作量小的场景

方案2:注册自定义方言兼容原有 th:data-* 写法

如果项目中已经大量使用了 th:data-* 格式的写法,逐行改动成本过高,可以通过自定义Thymeleaf方言实现原有写法兼容:

  • 自定义属性处理器类,继承 AbstractAttributeModifierAttrProcessor,实现 data-* 前缀属性的解析逻辑
  • 自定义方言类,继承 AbstractDialect,将上述自定义处理器注册到方言中
  • 将自定义方言注册为Spring Bean,Thymeleaf启动时会自动加载该方言,无需改动原有模板代码即可正常解析所有th:data-*属性
    该方案适合大型项目,模板存量多的场景

内容的提问来源于stack exchange,提问作者rafablanco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 21:21:03