我使用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>
答案 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);