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

Thymeleaf的th:replace、th:fragment不生效,main.html仅显内容无页眉页脚

问题根因
  • 核心原因:thymeleaf-layout-dialect 3.x版本已废弃layout:decorator属性,你代码中main.html使用的旧属性失效,导致布局装饰逻辑没有触发,仅返回内容页本身的渲染结果。
  • 其他可能触发原因:
    • 依赖版本不兼容:Spring Boot 3.x配套使用的Thymeleaf 3.1仅支持thymeleaf-layout-dialect 3.0及以上版本,未指定版本时可能拉取到不兼容的旧版本。
    • 模板路径不匹配:你代码中引用的layout/default、fragments/header等路径和实际resources下的模板文件存放路径不一致。
    • Thymeleaf缓存导致:开发环境未关闭模板缓存,修改后的配置没有生效。
解决方案
  1. 修正装饰器属性写法
    将main.html中的layout:decorator="~{layout/default}"替换为新版本支持的属性:
layout:decorate="~{layout/default}"
  1. 指定兼容的依赖版本
    如果使用Spring Boot 3.x,在gradle依赖中明确指定layout dialect的适配版本:
implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect:3.2.1'

如果使用Spring Boot 2.x,可使用2.x版本的layout dialect:

implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect:2.5.3'
  1. 核对模板存放路径
    确保resources/templates下的目录结构和你代码中引用的路径完全一致:
resources/
└── templates/
    ├── layout/
    │   └── default.html
    ├── fragments/
    │   ├── header.html
    │   └── footer.html
    └── main.html
  1. 关闭开发环境模板缓存
    在application.properties或application.yml中添加配置,避免缓存旧模板内容:
spring.thymeleaf.cache=false

修改完成后重启项目,清除浏览器缓存后重新访问即可正常渲染页眉、页脚。


内容的提问来源于stack exchange,提问作者이현승

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 00:06:07