VelocityContext无法获得价值

时间:2014-08-16 11:23:27

标签: spring velocity

我使用Spring和模板engine Velocity发送邮件。 我正在尝试将值设置为velocityContext,然后将其设置为velocity模板。

VelocityContext velocityContext = new VelocityContext();
                velocityContext.put("firstName", "Thomas");

当我调试我的代码时,我可以看到velocityContext获得值“Thomas”,但出于某些原因,当我在视图上获得此值时 - 我只得到${firstName}就像字符串一样。

这是我的代码。

private void sendEmail(final String toEmailAddresses, final String fromEmailAddress,
                           final String subject, final String attachmentPath,
                           final String attachmentName) {
        MimeMessagePreparator preparator = new MimeMessagePreparator() {
            public void prepare(MimeMessage mimeMessage) throws Exception {
                MimeMessageHelper message = new MimeMessageHelper(mimeMessage, true);
                message.setTo(toEmailAddresses);
                message.setFrom(new InternetAddress(fromEmailAddress));
                message.setSubject(subject);
                VelocityContext velocityContext = new VelocityContext();
                velocityContext.put("firstName", "Thomas");
                String body = VelocityEngineUtils.mergeTemplateIntoString(
                        velocityEngine, "templates/registration.vm", "UTF-8", null);
                message.setText(body, true);
                if (!StringUtils.isBlank(attachmentPath)) {
                    FileSystemResource file = new FileSystemResource(attachmentPath);
                    message.addAttachment(attachmentName, file);
                }
            }
        };
        this.mailSender.send(preparator);
    }

和模板:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
     <body>
         Hi, ${firstName}<br/> 
     </body>
</html>

1 个答案:

答案 0 :(得分:1)

您没有使用已创建和初始化的VelocityContext。如果您使用eclipse IDE,则会显示为警告。 VelocityEngineUtils不接受VelocityContext作为其任何方法中的参数。

有两种方法:

  • 或者,使用VelocityEngine,然后拨打VelocityEngine.mergeTemplate,将VelocityContext作为输入参数。
  • 使用VelocityEngineUtils并传递Map 模型,它将模板中的占位符与实际值相对应。我推荐这个,因为你的用例看起来非常简单。

而不是

VelocityContext velocityContext = new VelocityContext();
velocityContext.put("firstName", "Thomas");
String body = VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, "templates/registration.vm", "UTF-8", null);

使用

Map<String, Object> model = new HashMap<String, Object>();
model.put("firstName", "Thomas");
String body = VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, "templates/registration.vm", "UTF-8", model);