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
相关产品推荐
相关产品推荐

