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

Thymeleaf XML模式使用th:attr时属性名自动转小写问题咨询

Thymeleaf XML模式与HTML模式变量插入操作的差异说明

核心结论

th:attr语法在XML模式下完全支持,自定义属性名被自动转小写的问题属于模板模式配置错配导致,不属于语法不兼容问题。

两种模式的具体差异

  • 属性名大小写处理逻辑不同
    HTML模式遵循HTML规范中属性名不区分大小写的规则,渲染阶段会对所有自定义属性名做小写归一化处理,无论模板中写的是驼峰、全大写还是混合大小写,最终输出统一转为小写,不会保留原始命名格式。
    XML模式严格遵循XML语法中属性名大小写敏感的规则,渲染时会完整保留属性名的原始大小写,驼峰命名、命名空间前缀的大小写都会和模板写法完全一致,不会触发任何大小写转换逻辑。
  • 语法校验严格度不同
    HTML模式兼容HTML的宽松语法规则:支持可选闭合标签(如<br>、<input>不需要添加闭合斜杠),不需要提前声明Thymeleaf命名空间即可识别th:*指令,对特殊字符、HTML实体的校验更宽松,非XML标准实体(如&nbsp;)无需额外转义即可正常渲染。
    XML模式执行严格的XML语法校验:所有标签必须符合well-formed要求,必须显式闭合、属性值必须包裹引号;必须在根标签声明Thymeleaf的XML命名空间才能正常识别th:*指令;仅支持XML规范定义的5个基础实体,其他未声明的实体会直接触发解析错误。

属性名转小写的逻辑位置

属性名自动转小写的逻辑属于HTML模板专属处理链路,位于标准属性处理器的HTML属性归一化分支中,仅当模板被识别为HTML5/LEGACYHTML5模式时才会触发,不会在XML、XHTML等严格标记模式的处理流程中执行。

问题复现示例

问题场景下的模板写法:

<EntityDescriptor
...
    th:attr="entityID=${entityId},validUntil=${validUntil}">
... 
</EntityDescriptor>

模式错配时的错误输出:

<EntityDescriptor
...
    entityID="what_the_entity_id_is" validuntil="correct_timestamp">
... 
</EntityDescriptor>

排查方向:优先检查模板解析器的templateMode配置,确认目标XML模板没有被错误分配给HTML模板解析器处理;如果是SpringBoot环境,额外检查模板文件后缀和模板解析器的后缀匹配规则,避免XML后缀文件被默认HTML解析器拦截。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 10:18:21