【发布时间】:2013-09-12 20:00:21
【问题描述】:
我是 FreeMarker 的新手,我想用它来发送电子邮件。我的应用程序集成了 Spring 3.1、Hibernate 3.0 和 Struts 2 框架。
所以,基本上我发送邮件的代码是(我使用的是 java mail api):
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(fromAddress));
Address[] addresses = new Address[1];
addresses[0] = new InternetAddress(fromAddress);
message.setReplyTo(addresses);
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toAddress));
message.setSubject(subject);
//To set template using freemarker
BodyPart bodyPart = new MimeBodyPart();
Configuration cfg = new Configuration();
Template template = cfg.getTemplate("template.ftl");
Map<String, String> rootMap = new HashMap<String, String>();
rootMap.put("toName", toName);
rootMap.put("message", sendMessage);
Writer out = new StringWriter();
template.process(rootMap, out);
bodyPart.setContent(out.toString(), "text/html");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(bodyPart);
message.setContent(multipart,"text/html; charset=ISO-8859-1");
Transport.send(message);
但是当它尝试发送邮件时,它会抛出一个异常:
java.io.FileNotFoundException: Template "template.ftl" not found.
template.ftl 文件位于WEB-INF/ftl/ 目录中。
在我的 spring-config.xml 文件中,我添加了这个:
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/WEB-INF/ftl/"/>
</bean>
<bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="cache" value="true"/>
<property name="prefix" value=""/>
<property name="suffix" value=".ftl"/>
</bean>
【问题讨论】:
-
在调用 getTemplate 时可以尝试删除 ftl 扩展吗?
-
同样的异常,找不到模板“template”。
-
当你尝试获取模板时,你应该使用你在应用上下文中定义的配置,而不是创建一个新的
-
正如 Sergi 所说,您在 Spring 下设置的 FreeMarker
Configuration与您在 Java 代码中创建的 FreeMarker 配置无关。最后你甚至没有设置TemplateLoader。 (此外,如果您为每封邮件重新创建Configuration,如果您发送 很多 封邮件,它可能会非常慢。Configuration实例意味着是单例的。) -
@SergiAlmar & @ddekany 我做到了,现在它正在工作。谢谢你的帮助。 :) 但是,它花费了太多时间,这正常吗? (我已经将
FreeMarkerConfigurer的对象注入到我的Email类中,并使用它的getConfiguration方法得到Configuration的对象,然后同上。)
标签: java spring jakarta-mail freemarker