【问题标题】:How to pass the value in html?如何在html中传递值?
【发布时间】:2019-06-23 20:17:15
【问题描述】:

注册的时候,我保存在html中的文本发送到邮件中,我希望将用户的值赋给这些值和要发送的文本

    <!DOCTYPE html>
    <html xmlns:th="http://www.thymeleaf.org">
<head>
    <title th:remove="all">Template for HTML email</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>

    <p th:text="${'Hello Dear,' + ${name}}">
    Hello Dear John Doe`</p>`


    <p th:text="${'Welcome.Please visit, http://aa.ru/activate-account/' + ${activationCode}}">
    Welcome. Please visit http://aa.ru/activate-account/%s
    </p>
<p>
      Thanks

    </p>
</body>
</html>
        private TemplateEngine springTemplateEngine  = new TemplateEngine();
        Context context = new Context();
        context.setVariable("name",user.getUsername());
            context.setVariable("activationCode",user.getActivationCode());

        String text = springTemplateEngine.process("email-template.html",context);
        if (!org.springframework.util.StringUtils.isEmpty(user.getEmail())) 
        {

            mailSenderService.send(user.getEmail(), "Activation code", text);
        }

这里的邮件应该来消息你好亲爱的萨米尔 欢迎访问,http://aa.ru/activate-account/blabla

templateResolver.setResolvablePatterns(Collections.singleton("html/*"));
    templateResolver.setPrefix("/templates/");
    templateResolver.setSuffix(".html");

【问题讨论】:

  • email-template.html 位于何处?它是直接在templates 文件夹内还是在子级别?另外,您是否厌倦了从模板名称中删除 .html ?通常你不需要那个。
  • 你能检查一下吗?
  • 是的,你绝对不需要.htmlString text = springTemplateEngine.process("email-template",context);
  • String text = springTemplateEngine().process("email-template", context);
  • 解决不了问题

标签: spring thymeleaf


【解决方案1】:

我认为问题在于这一行。

private TemplateEngine springTemplateEngine  = new TemplateEngine();

看起来您正在创建一个没有任何配置的新模板引擎。通常,当我在我的项目中发送电子邮件时,我会使用我在 MvcConfig 类中配置的模板引擎。那么,首先,让我向您展示我的 MvcConfig 类。

配置

@Configuration
public class MvcConfig extends WebMvcConfigurerAdapter {

    @Bean
    @Description("Thymeleaf template resolver serving HTML 5")
    public ClassLoaderTemplateResolver templateResolver() {
        ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
        templateResolver.setPrefix("templates/");
        templateResolver.setCacheable(false);
        templateResolver.setSuffix(".html");
        templateResolver.setTemplateMode("HTML5");
        templateResolver.setCharacterEncoding("UTF-8");
        return templateResolver;
    }

    @Bean
    public ServletContextTemplateResolver servletContextTemplateResolverResolver() {
        final ServletContextTemplateResolver resolver =
                new ServletContextTemplateResolver();
        resolver.setPrefix("/WEB-INF/templates/");
        resolver.setSuffix(".html");
        resolver.setTemplateMode("HTML5");
        resolver.setCacheable(false);
        resolver.setCharacterEncoding("UTF-8");
        return resolver;
    }

    @Bean
    @Description("Thymeleaf template engine with Spring integration")
    public SpringTemplateEngine templateEngine() {
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.addTemplateResolver(new UrlTemplateResolver());
        templateEngine.addDialect(new SpringSecurityDialect());
        templateEngine.setTemplateResolver(templateResolver());
        return templateEngine;
    }


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

}

现在,每当我发送电子邮件时,我都会使用以下几行。如您所见,我正在获取我在 MvcConfig 类上配置的模板引擎。也许,这可能是你的错误的原因。

MvcConfig config = new MvcConfig();
TemplateEngine templateEngine = config.templateEngine();

【讨论】:

  • 哪些是?另外,这是一个示例,我的意思是,您正在创建一个新的 TemplateEngine,而您应该使用一个已经配置好的模板引擎。
  • 另外,我的代码中有一些你不需要的东西,比如SpringSecurityDialect
  • 那么最终的 ServletContextTemplateResolver resolver = new ServletContextTemplateResolver();?
  • 现在,这与你发送它的方式有关,这有点超出了这个问题的范围,我认为应该在你的mailSenderService.send(user.getEmail(), "Activation code", text) 代码中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-28
  • 2019-10-13
相关资源
最近更新 更多