Thymeleaf XML模式使用th:attr时属性名自动转小写问题咨询
Thymeleaf XML模式与HTML模式变量插入操作的差异说明
核心结论
th:attr语法在XML模式下完全支持,自定义属性名被自动转小写的问题属于模板模式配置错配导致,不属于语法不兼容问题。
两种模式的具体差异
- 属性名大小写处理逻辑不同
HTML模式遵循HTML规范中属性名不区分大小写的规则,渲染阶段会对所有自定义属性名做小写归一化处理,无论模板中写的是驼峰、全大写还是混合大小写,最终输出统一转为小写,不会保留原始命名格式。
XML模式严格遵循XML语法中属性名大小写敏感的规则,渲染时会完整保留属性名的原始大小写,驼峰命名、命名空间前缀的大小写都会和模板写法完全一致,不会触发任何大小写转换逻辑。 - 语法校验严格度不同
HTML模式兼容HTML的宽松语法规则:支持可选闭合标签(如<br>、<input>不需要添加闭合斜杠),不需要提前声明Thymeleaf命名空间即可识别th:*指令,对特殊字符、HTML实体的校验更宽松,非XML标准实体(如 )无需额外转义即可正常渲染。
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
相关产品推荐
相关产品推荐

