【发布时间】:2013-10-25 21:15:23
【问题描述】:
我有一个问题。我正在使用 Struts(Struts 2 框架)开发一个 Web 应用程序。
我为每个用户创建了一个 Freemarker 模板文件并将其保存在
webapps/mail/mailEn/customer.ftl
现在,当页面被调用时,我必须查看 customer.ftl,所以我尝试在我的 java 类中处理它,如下所示: (当我使用本地目录路径 C://... 它工作)
MimeBodyPart textBodyPart = null;
try {
textBodyPart = new MimeBodyPart();
Configuration cfg = new Configuration();
//FileTemplateLoader ftl1 = new FileTemplateLoader(new File ("D:/Workspace//Projectname///web///styles/");
FileTemplateLoader ftl1 = new FileTemplateLoader (new File("\\mail\\mailEn")); TemplateLoader[] loaders = new TemplateLoader[] { ftl1 };
MultiTemplateLoader mtl = new MultiTemplateLoader(loaders);
cfg.setTemplateLoader(mtl);
cfg.setObjectWrapper(new DefaultObjectWrapper());
Template template = cfg.getTemplate("customerInfo.ftl");
Map<String, String> rootMap = new HashMap<String, String>();
rootMap.put("image1", "images/LOGO.jpg");
rootMap.put("recipient", "aaaa");
rootMap.put("address", "xxxx");
rootMap.put("contact", "yyyy");
rootMap.put("country", "uuuu");
rootMap.put("sender", "rrrrr");
Writer out = new StringWriter();
template.process(rootMap, out);
textBodyPart.setContent(out.toString(),Constants.TEXT_HTML);
}
使用绝对路径(D:/....) 它可以正常工作。但这不可能是
解决方案,因为当我完成这个网络应用程序时,我将有一个战争文件,它将被放在服务器上,那么绝对路径将是错误的。所以我需要一个始终有效的相对路径!
我现在正在使用 Eclipse。当我尝试使用上面的路径(/../.. ....)时, 我要找的文件永远找不到。 (我试图走上 项目然后到文件夹mail,文件所在的位置)
我尝试了许多不同的路径,例如 ./web/mail/ 、 ../../../../../web/styles 等等, 但我从来没有找到我要找的文件。
如果有人能给我一个提示,我将非常感激!
谢谢!
【问题讨论】:
-
将它们放入
resources文件夹并使用getResourceAsStream方法。 -
他可以使用
ClassTemplateLoader而不是getResourceAsStream。否则,如果 FreeMarker 无法加载模板本身,它就无法为您缓存Template。 -
我尝试使用 ClassTemplateLoader 但它不起作用。它说找不到文件错误。
标签: java eclipse struts2 hashmap freemarker