【问题标题】:TemplateEngine not Finding file within templates folderTemplateEngine 在模板文件夹中找不到文件
【发布时间】:2019-01-02 16:50:34
【问题描述】:

我正在构建一个从数据库加载国际化消息的 SpringBoot 应用程序。 (Followed this tutorial)

由此,我必须创建一个 ThymeleafConfiguration 类并设置一个 SpringTemplateEngine Bean。教程只对这个配置给出了一个粗略的想法(只配置了消息源,但没有配置其他模板引擎配置),所以它破坏了我的控制器页面渲染(控制器现在返回字符串而不是视图)。

我正在尝试配置我的 TemplateEngine 的其余部分(例如 TemplateResolver,我认为这是渲染不正确的原因),但是,我无法弄清楚如何正确地做到这一点 [我保留收到“模板解析期间发生错误(模板:“ServletContext 资源 [/templates/login.html]”)消息]。

如何正确配置SpringTemplateEngine?

到目前为止我的配置:

@Configuration
public class ThymeleafConfiguration implements WebMvcConfigurer, ApplicationContextAware{

    private ApplicationContext applicationContext;

    @Autowired
    private DatabaseMessageSource databaseMessageSource;

    @Bean
      public ViewResolver viewResolver() {
        ThymeleafViewResolver resolver = new ThymeleafViewResolver();
        resolver.setTemplateEngine(thymeleafTemplateEngine());
        resolver.setCharacterEncoding("UTF-8");
        return resolver;
      }

     private ITemplateResolver templateResolver() {
            SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
            resolver.setApplicationContext(applicationContext);
            resolver.setPrefix("/templates/");
            resolver.setSuffix(".html");
            resolver.setTemplateMode(TemplateMode.HTML);
            return resolver;
          }


    @Bean
    public SpringTemplateEngine thymeleafTemplateEngine() {
        SpringTemplateEngine engine = new SpringTemplateEngine();
        engine.setTemplateResolver(templateResolver());
        engine.setTemplateEngineMessageSource(databaseMessageSource);
        return engine;
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;

    }

}

控制器类:

 @Controller
    public class ApplicationController {


    @RequestMapping("/home")
    public String home() {
        return "/home.html";
    }


    @RequestMapping("/core/index")
    public String index() {
        return "/core/index.html";
    }

    @RequestMapping("/login")
    public String login() {
        return "login";
    }

【问题讨论】:

    标签: java spring-boot thymeleaf


    【解决方案1】:

    问题出在

    private ITemplateResolver templateResolver() {
        SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
        resolver.setApplicationContext(applicationContext);
        resolver.setPrefix("/templates/"); // Here!!!
        resolver.setSuffix(".html");
        return resolver;
    }
    

    由于模板位于 src/main/resources 中,因此必须将其指向类路径,如下所示:

    @Bean
    public SpringResourceTemplateResolver templateResolver() {
        SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
        resolver.setApplicationContext(applicationContext);
        resolver.setPrefix("classpath:/templates/"); // It works after adding 'classpath:'
        resolver.setSuffix(".html");
        return resolver;
    }
    

    此外,从接口到实现类的一些变化不应影响结果。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-17
    • 1970-01-01
    • 2016-11-17
    • 2017-08-13
    相关资源
    最近更新 更多