mba*_*a12 9 java google-app-engine servlets freemarker
我想在我的Google App Engine java应用程序中部署一些Freemarker模板,以用作电子邮件正文模板.我正在使用freemarker-gae-2.3.23.jar.
我的问题是在war文件中我应该放置我的模板文件,以便Freemarker Configuration类可以找到它们吗?我认为WEB-INF/classes/templates可以工作,但是当我在GAE实例上运行它时,我收到以下错误.getRealPath()也没有提供任何见解.返回空字符串.任何想法或建议非常感谢.
SEVERE: Template ./templates/invitation.ftl not found.
java.lang.RuntimeException: Error in loading ftl template: Template ./templates/invitation.ftl not found.
Run Code Online (Sandbox Code Playgroud)
我的基本配置如下:
public class FreeMarkerConfig {
private static FreeMarkerConfig freeMarkerConfig = null;
private static Configuration cfg = null;
private static final Logger logger = Logger.getLogger(FreeMarkerConfig.class.getName());
private FreeMarkerConfig(ServletContext context){
cfg = new Configuration();
cfg.setServletContextForTemplateLoading(context, "/templates");
}
public static FreeMarkerConfig getInstance(ServletContext context){
if(freeMarkerConfig == null){
freeMarkerConfig = new FreeMarkerConfig(context);
return freeMarkerConfig;
}
return freeMarkerConfig;
}
public static Template getTemplateByName(String fileName){
try {
return cfg.getTemplate(fileName);
} catch(IOException e) {
logger.severe(e.getMessage());
e.getStackTrace();
throw new RuntimeException("Error in loading ftl template: "+e.getMessage());
}
}
}l
Run Code Online (Sandbox Code Playgroud)
解决方案是双重的。上下文位置是“web”目录。所以用这个设置 freemarker 配置,解决了问题。
private FreeMarkerConfig(ServletContext context){
cfg = new Configuration();
cfg.setServletContextForTemplateLoading(context, "/WEB-INF/classes/templates/");
}
Run Code Online (Sandbox Code Playgroud)
作为第二个有用的提示,我发现我必须仅使用模板名称而不是文件名来请求模板。即邀请而不是invitation.ftl
| 归档时间: |
|
| 查看次数: |
468 次 |
| 最近记录: |