我正在运行Thymeleaf的春季启动应用程序。当我通过我的IDE(IntelliJ)运行应用程序时,一切运行正常。
但是,当我通过命令行(java -jar
)运行应用程序时,视图无法解决,我收到以下错误:
org.thymeleaf.exceptions.TemplateInputException: Error resolving template "index", template might not exist or might not be accessible by any of the configured Template Resolvers
at org.thymeleaf.TemplateRepository.getTemplate(TemplateRepository.java:245)
at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1104)
at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1060)
at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1011)
at org.thymeleaf.spring3.view.ThymeleafView.renderFragment(ThymeleafView.java:335)
at org.thymeleaf.spring3.view.ThymeleafView.render(ThymeleafView.java:190)
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1225)
at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1012)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
以下是我的设置:
我的目录结构
PROJECT-ROOT
--src
--main
--java
--controllers
--[CLASS WITH MAIN METHOD]
--views
--index.html
我的模板解析器:
@Bean
public ViewResolver viewResolver() {
ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
templateResolver.setTemplateMode("XHTML");
templateResolver.setPrefix("views/");
templateResolver.setSuffix(".html");
SpringTemplateEngine engine = new SpringTemplateEngine();
engine.setTemplateResolver(templateResolver);
ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
viewResolver.setTemplateEngine(engine);
return viewResolver;
}
我应该在哪里放置视图,以便在从jar文件运行时可以正确解析它们?
答案 0 :(得分:9)
我认为答案是它取决于您的构建配置。目录" src / main / views"不是任何常见构建工具的标准资源位置,因此您必须将其显式添加到用于构建jar的工具的配置中。
如果我是你,我会顺其自然(为什么不同?),只需使用" src / main / resources"用于类路径资源。我也会完全忽略百万美元的配置,让Spring Boot处理它,把模板放在" src / main / resources / templates"。
答案 1 :(得分:0)
我遇到了同样的问题,并从Springboot documentation发现框架使用以下类路径:
这意味着您可以将文件夹模板放在以下任何目录中,并且您的应用程序可以找到里面的视图。
示例:
文件位置
/src/main/public/templates/index.html
在application.properties
中spring.view.prefix:/
spring.view.suffix:.html
注意既然你正在使用百日咳,那么你们都需要在依赖项中导入它(Maven?)并在你的html中使用它,如下所示:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org"
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">