Thymeleaf 无法检测到 spring-boot 项目中的模板
Posted
技术标签:
【中文标题】Thymeleaf 无法检测到 spring-boot 项目中的模板【英文标题】:Thymeleaf cannot detect templates inside spring-boot project 【发布时间】:2017-08-14 07:40:23 【问题描述】:我的 Spring Boot 应用程序中有以下项目结构,我想在其中使用 Thymeleaf
projectName
-Gradle-Module1(Spring boot module)
-build
-src
-main
-resources
-templates
index.html
build.gradle
-Gradle-Module2
...
build.gradle
...
但是 spring-boot 找不到我的模板目录并显示警告
找不到模板位置:classpath:/templates/(请添加一些模板或检查您的 Thymeleaf 配置)
PS:我使用的是@EnableAutoConfiguration
在我的控制器代码中,我正在执行以下操作:
@Controller
@EnableAutoConfiguration
public class BaseController
@RequestMapping(value = "/")
public String index()
return "index.html";
index.html
文件只打印 hello world。
所以通常它应该在src/resources/templates/
(我想是同一个 Gradle 模块的)内部查找,但不知何故它无法找到它。
当我尝试访问 localhost:8080
时出现以下错误
解析模板“index.html”时出错,模板可能不存在或可能无法被任何已配置的模板解析器访问`
我有什么遗漏吗? 任何指针表示赞赏。谢谢。
【问题讨论】:
这是一个很好的问题。感谢您的提问! 【参考方案1】:您必须按如下方式配置 Thymeleaf:
@Configuration
public class ThymeleafConfig
@Bean
public SpringResourceTemplateResolver templateResolver()
SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
templateResolver.setCacheable(false);
templateResolver.setPrefix("classpath:/templates/");
templateResolver.setSuffix(".html");
return templateResolver;
@Bean
public SpringTemplateEngine templateEngine()
SpringTemplateEngine springTemplateEngine = new SpringTemplateEngine();
springTemplateEngine.addTemplateResolver(templateResolver());
return springTemplateEngine;
@Bean
public ThymeleafViewResolver viewResolver()
ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
viewResolver.setTemplateEngine(templateEngine());
viewResolver.setOrder(1);
return viewResolver;
Spring doc recommends 将@EnableAutoConfiguration
注释添加到您的主要@Configuration
类。
您的项目结构似乎有误,典型的包层次结构是:
src
|- main
|- java
|- resources
|- static
|- templates
|- test
在这种情况下,您的模板将位于 src/main/resources/templates
,而不是 src/resources/templates/
。
【讨论】:
谢谢。行“templateResolver.setPrefix("classpath:/templates/");"在运行带有 jar 包装的 Spring-Boot 时,为我解决了这个问题。 这解决了我的问题。我已经使用 Intellij IDEA 开发,并且我能够以某种方式在没有这种配置的情况下运行 thymeleaf。当我将项目打包到 JAR 并在服务器上运行时,我们注意到了这个问题。花了很多时间才终于找到这个。 我相信,如果您使用的是 spring boot 并且对您的类路径有 spring-boot-starter-thymeleaf 依赖(例如,如果使用 maven,则在您的 pom.xml 中),您不需要显式连接一个 ViewResolver。【参考方案2】:您应该只返回文件名。例如,没有 .hmtl
@RequestMapping(value = "/")
public String index()
return "index";
【讨论】:
试过但面临问题Wed Mar 22 15:33:08 IST 2017 There was an unexpected error (type=Internal Server Error, status=500). Error resolving template "index", template might not exist or might not be accessible by any of the configured Template Resolvers
请为 requestmapping 和 index.html 文件发布您的课程,以便我们了解更多上下文。您是否使用任何形式的身份验证?
能否请您为您的 questmappin 和 index.html 文件发布课程?如果你有一个更大的堆栈跟踪,那会很有帮助。你只用return "index";
修改了你的帖子
我已经添加了Controller类,我目前正在尝试学习React + Spring boot,所以没有太多代码,而且我的index.html只包含一个像Hello world这样的打印语句【参考方案3】:
@GetMapping("/")
public String index()
return "index";
【讨论】:
以上是关于Thymeleaf 无法检测到 spring-boot 项目中的模板的主要内容,如果未能解决你的问题,请参考以下文章
Thymeleaf - 我无法使用 Link th:href 将两个值从 HTML 传递到控制器
Thymeleaf-Spring4 无法自动装配 TemplateEngine
Thymeleaf (Java Spring):无法让 mvc.uri 工作
Spring MVC + thymeleaf + html 在页面上无法获取session的值