Spring Boot整合Thymeleaf时模板解析失败问题咨询
解决Thymeleaf模板解析失败:找不到
fragments/header的问题 嘿,我刚梳理了你遇到的这个模板找不到的问题,咱们一步步来排查解决:
1. 先确认文件的存放位置是否正确
Spring Boot中Thymeleaf默认会从src/main/resources/templates目录加载模板文件,所以你的header.html必须放在templates/fragments/下面,也就是完整路径是src/main/resources/templates/fragments/header.html。另外要注意文件名大小写敏感,别把header.html写成Header.html(Windows系统可能不敏感,但部署到Linux/macOS环境会出问题)。
2. 修正th:replace的语法细节
看你list.html里的代码:
<div th:replace="~{fragments/header}:: header"></div>
这里有两个可以调整的地方:
- 可以简化写法,去掉
~{}包裹,写成:<div th:replace="fragments/header :: header"></div>(两种写法都合法,但简化后更清晰) - 必须确保
header.html里正确定义了名为header的片段,比如:<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <body> <!-- 这里要明确标注fragment名称 --> <header th:fragment="header"> <!-- 你的头部内容,比如导航栏、logo等 --> </header> </body> </html>
另外错误提示里显示~{fragments/header(少了闭合的}),检查下你的代码是不是拼写时漏了这个符号,这也会导致模板解析失败。
3. 确认依赖是否完整引入
如果是Maven项目,确保pom.xml里有Thymeleaf的starter依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
如果用了layout方言(你的代码里引入了layout命名空间),还要加上对应的依赖:
<dependency> <groupId>nz.net.ultraq.thymeleaf</groupId> <artifactId>thymeleaf-layout-dialect</artifactId> </dependency>
Gradle项目的话,对应依赖配置是:
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect'
4. 清理缓存并重启项目
有时候IDE的缓存会导致新添加的模板文件没被加载,试试:
- 执行Maven的
clean命令(或者Gradle的clean) - 打开IDE的
File -> Invalidate Caches / Restart选项,清理缓存后重启项目
做完这些步骤,应该就能解决模板找不到的问题啦!
内容的提问来源于stack exchange,提问作者Niles
相关产品推荐
相关产品推荐

