spring - 如何使用上下文将参数传递给 Thymeleaf 模板?

标签 spring thymeleaf

我正在尝试发送 HTML 电子邮件。我已经创建了一个模板文件,但由于它是由不同的模板解析器解析的,所以我不知道如何将我的参数传递给模板。

我对模板解析器和引擎有以下配置:

@Bean
public TemplateResolver templateResolver() {
    TemplateResolver resolver = new ServletContextTemplateResolver();
    resolver.setPrefix("/WEB-INF/views/");
    resolver.setSuffix(".html");
    resolver.setCharacterEncoding("UTF-8");
    resolver.setTemplateMode("HTML5");
    resolver.setOrder(2);
    return resolver;
}

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

@Bean
public SpringTemplateEngine templateEngine() {
    final SpringTemplateEngine engine = new SpringTemplateEngine();
    final Set<TemplateResolver> templateResolvers = new HashSet<TemplateResolver>();
    templateResolvers.add(emailTemplateResolver());
    templateResolvers.add(templateResolver());
    engine.setTemplateResolvers(templateResolvers);
    return engine;
}

我将模板中需要的所有参数从 Controller 传递到服务。这是我发送电子邮件的服务实现:

@Service("EmailService")
public class EmailServiceImpl implements EmailService {

  @Autowired
  private JavaMailSender mailSender;

  @Autowired
  private TemplateEngine templateEngine;

  public void sendSimpleMail(final Locale locale,
                           final String category,
                           final String recipientEmail)
        throws MessagingException {

      // Prepare the evaluation context
      final Context ctx = new Context(locale);

      // Prepare message using a Spring helper
      final MimeMessage mimeMessage = this.mailSender.createMimeMessage();
      final MimeMessageHelper message = new MimeMessageHelper(mimeMessage, "UTF-8");
      String subject = category + " - " + result_filter;
      message.setSubject(subject);
      message.setTo(recipientEmail);

      // Create the HTML body using Thymeleaf
      final String htmlContent = this.templateEngine.process("email", ctx);
      message.setText(htmlContent, true /* isHtml */);


      // Send email
      this.mailSender.send(mimeMessage);
  }
}

下面是我要使用参数的模板部分:

<label style="font-size: 12px;padding-bottom: 1em;" th:value="parameter">Test</label>

有没有办法做到这一点,或者我需要其他东西吗?

提前致谢

最佳答案

Jail,我希望我理解正确,您希望将参数传递给页面以呈现它们,在这种情况下希望这会有所帮助。 您已经关闭了,您所要做的就是从上下文中调用 setVariable: http://www.thymeleaf.org/apidocs/thymeleaf/2.0.2/org/thymeleaf/context/AbstractContext.html#setVariables(java.util.Map)

将您的模板视为标准的 thymeleaf 页面。

所以使用您的标题示例:

<label style="font-size: 12px;padding-bottom: 1em;" th:text="${parameter}">Test</label>

记住 th:value 只会设置 value 属性,th:text 会改变标题,我认为这是你想要的(否则继续使用 th:value)。

在你的java代码中添加这一行

// This is where you set your variables
      ctx.setVariables("parameter","Random Title");  // here we are setting the parameter variable to "Random Title"

 // Create the HTML body using Thymeleaf
      final String htmlContent = this.templateEngine.process("email", ctx);
      message.setText(htmlContent, true /* isHtml */);

关于spring - 如何使用上下文将参数传递给 Thymeleaf 模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31148364/

相关文章:

java - Spring Data REST、QueryDSL 和 HashMaps - 引用 HashMap 属性时来自 URL 的 Null 谓词

spring - 如何在 AbstractTransactionalJUnit4SpringContextTests 事务中执行 junit 规则?

java - 具有相同RestEndPoint的两种不同方法:如何解决?

升级到最新版本时 Spring Boot 国际化不起作用

java - Thymeleaf,无法访问参数

java - spring security : NoSuchBeanDefinitionException: No qualifying bean of type [org. springframework.security.config.annotation.ObjectPostProcessor] 找到

javascript - 如何使用 JavaScript 捕获和格式化表格数据?

java - 在 Spring Thymeleaf 中获取值(value)的问题

java - 使用 EnableAutoConfiguration 时如何更改默认端口 8080

java.lang.IllegalArgumentException "Can not set DAO field"与 Spring 4 & Hibernate 4