适合春天的Thymeleaf景色

时间:2014-04-05 17:34:04

标签: spring-mvc thymeleaf spring-boot

我正在运行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文件运行时可以正确解析它们?

2 个答案:

答案 0 :(得分:9)

我认为答案是它取决于您的构建配置。目录" src / main / views"不是任何常见构建工具的标准资源位置,因此您必须将其显式添加到用于构建jar的工具的配置中。

如果我是你,我会顺其自然(为什么不同?),只需使用" src / main / resources"用于类路径资源。我也会完全忽略百万美元的配置,让Spring Boot处理它,把模板放在" src / main / resources / templates"。

答案 1 :(得分:0)

我遇到了同样的问题,并从Springboot documentation发现框架使用以下类路径

  • / META-INF /资源/
  • /资源/
  • /公共/
  • /静态/

这意味着您可以将文件夹模板放在以下任何目录中,并且您的应用程序可以找到里面的视图。

示例:

文件位置

/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">