当前位置: 首页 > 知识库问答 >
问题:

Spring Boot 4和Thymeleaf web和mail一起不工作

包承望
2023-03-14

我在使用SpringBoot4和ThymeleafWeb及其邮件时遇到了一些问题。

如果我将SpringBoot4单独与Thymeleaf web一起使用,它将能够正常工作,而不会出现任何问题。当我包含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公共ViewResolver ViewResolver(){ThymileAfViewResolver ViewResolver=new ThymileAfViewResolver();ViewResolver.setTemplateEngine(templateEngine());返回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 boot中正确使用thymeleaf web和邮件模板?

这是我对胸腺叶的Spring属性


共有1个答案

柴增
2023-03-14
匿名用户

如果你已经添加了sping-boot-starter-thymeleaf应该可以在没有任何配置的情况下工作(sping-boot-starter-thymeleaf对你来说很神奇)

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

否则,如果您正在寻找configurae,那么在一个配置类中创建beanTemplateResolver就可以了。

@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/tem板中添加您的邮件模板。

因此,例如,如果您创建了一个名为mymail.html的模板,您应该使用SpringTemplateEngine bean进行处理。在需要的地方注射:

@Autowired
public SpringTemplateEngine templateEngine;

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

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

 类似资料:
  • 我有一个测试类,它有一个带有CsvSource的参数化测试,还有其他使用CapturedOutput的测试。它们单独运行良好,但在一起运行时随机失败,没有任何接触异常。以下是示例代码: 对如何解决这个问题有什么想法吗? PS:我无法创建另一个测试文件。

  • {“时间戳”:1553613278534,“状态”:400,“错误”:“错误请求”,“消息”:“必需的字符串参数'param2'不存在”,“路径”:“/MyURL/42”} 我希望PUT的工作就像POST一样,但它似乎不是。 不幸的是,我不能将参数作为QueryParam发送,因此我应该维护相同的请求调用,因为我正在重构一个完全以这种方式工作的现有endpoint。

  • 当异常发生在CompletableFuture中时,我试图设置一个默认值,我通过如下方法使其工作: 但是,当我试图在不好的事情发生时异常地使用complete来停止CompletableFuture,并按如下方式跟踪异常时,我无法像刚才那样捕捉到异常。 更新日期2018-06-09谢谢您的帮助,@Daniele 在join()之前封闭的句柄按预期工作。但在这种情况下,

  • 我正在试验把杰克逊和龙目岛结合起来。这些是我的课: 这些是我添加到类spth中的JAR: > 龙目岛:https://projectlombok.org/downloads/lombok.jar(1.16.10version) 此外,Netbeans项目被配置为“保存时不编译”、“生成调试信息”、“报告不推荐使用的API”、“跟踪java依赖项”、“Activacte注释处理”和“编辑器中的Act

  • 问题内容: 在一个活动中,我有一个datePicker(旋转器),它允许用户选择他们的出生日期,在此之下,用户还必须选择他们的性别。我有一个按钮,一旦设置了两个值(日期和性别),就会启用该按钮。尽管首先更改了值,但我现在面临的问题是启用该按钮。当前,用户必须选择其出生日期,然后选择其性别,才能激活该按钮。我希望无论首先更改哪个值都可以启用该按钮。 这是我的代码: 问题答案: 您的代码很少有问题。

  • 服务被调用,但我的问题是这行代码 不起作用,我的意思是它真的调用了adminDao。选择方法,从而从数据库中获取结果。这是我不想要的。你知道如何模拟方法调用吗?