首页 文章

Spring Boot 4和Thymeleaf网络和邮件一起不起作用

提问于
浏览
0

我在使用Spring Boot 4以及Thymeleaf web及其邮件时遇到了一些问题 .

如果我单独使用Thymeleaf web的Spring Boot 4,它可以毫无问题地工作 . 当我包含Thymeleaf邮件配置时,问题就开始了

@Bean
    public ViewResolver viewResolver() {
        ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
        viewResolver.setTemplateEngine(templateEngine());
        return viewResolver;
    }


    @Bean(name ="templateEngine")
    public SpringTemplateEngine templateEngine() {
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.addTemplateResolver(emailTemplateResolver());
        return templateEngine;
    }

    private TemplateResolver emailTemplateResolver() {
        TemplateResolver templateResolver = new ClassLoaderTemplateResolver();
        templateResolver.setPrefix("/templates/");
        templateResolver.setTemplateMode("HTML5");
        templateResolver.setCharacterEncoding("UTF-8");
        templateResolver.setOrder(1);
        return templateResolver;
    }

如果我尝试构建并运行此页面,则页面无法加载 . 所以我已经使用包含Web模板更新了代码 .

@Bean
    public ViewResolver viewResolver() {
        ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
        viewResolver.setTemplateEngine(templateEngine());
        return viewResolver;
    } 

 @Bean(name ="templateEngine")
public SpringTemplateEngine templateEngine() {
    SpringTemplateEngine templateEngine = new SpringTemplateEngine();
    templateEngine.addTemplateResolver(emailTemplateResolver());
    templateEngine.addTemplateResolver(webTemplateResolver());
    return templateEngine;
}

private TemplateResolver emailTemplateResolver() {
    TemplateResolver templateResolver = new ClassLoaderTemplateResolver();
    templateResolver.setPrefix("/templates/");
    templateResolver.setTemplateMode("HTML5");
    templateResolver.setCharacterEncoding("UTF-8");
    templateResolver.setOrder(1);
    return templateResolver;
}

private TemplateResolver webTemplateResolver() {
    TemplateResolver templateResolver = new ServletContextTemplateResolver();
    templateResolver.setPrefix("/templates/");
    templateResolver.setTemplateMode("HTML5");
    templateResolver.setCharacterEncoding("UTF-8");
    templateResolver.setOrder(2);
    return templateResolver;
}

这是加载页面时返回的错误:

2016-10-14 14:56:57.137 ERROR 3875 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.thymeleaf.exceptions.TemplateInputException: Error resolving template "index", template might not exist or might not be accessible by any of the configured Template Resolvers] with root cause

    org.thymeleaf.exceptions.TemplateInputException: Error resolving template "index", template might not exist or might not be accessible by any of the configured Template Resolvers

需要什么配置才能使百褶网和邮件模板都能正确使用 spring 靴?

这是我对百里香的 Spring 天属性

spring.thymeleaf.check-template-location=true
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.view-names=index
spring.thymeleaf.suffix=.html
spring.thymeleaf.mode=HTML5
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.content-type=text/html
spring.thymeleaf.cache=false
spring.thymeleaf.check-template=true

1 回答

  • 0

    如果你已添加 spring-boot-starter-thymeleaf 应该没有任何配置工作( spring boot 为你做了魔法)

    <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    

    否则,如果你正在寻找配置它只是在一个类似的配置类中创建bean TemplateResolver 应该工作 .

    @Bean
    public ClassLoaderTemplateResolver emailTemplateResolver() {
        ClassLoaderTemplateResolver emailTemplateResolver = new ClassLoaderTemplateResolver();
        emailTemplateResolver.setSuffix(".html");
        emailTemplateResolver.setTemplateMode("HTML5");
        emailTemplateResolver.setCharacterEncoding("UTF-8");
        emailTemplateResolver.setOrder(1);
    
        return emailTemplateResolver;
    }
    

    然后,您必须在 src/main/resources/templates 中添加您的邮件模板 .

    因此,例如,如果您创建名为 mymail.html 的模板,则应使用SpringTemplateEngine bean进行处理 . 将其注入您需要的地方:

    @Autowired
    public SpringTemplateEngine templateEngine;
    

    然后处理邮件添加文件模板的名称wihtout .html extension并将其作为文本添加到 JavaMailSender ,如下一个示例所示:

    String body = templateEngine.process("mymail", ctx);
     javamail.setText(body, true);
    

相关问题