浏览 3326 次
锁定老帖子 主题:freemarker生成静态页面
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-11-01
方法一:(这个方法借鉴freemarker的docs文档Programmer's Guide 的quick start部分,详细请看相关的文档。 java 代码
public class HtmlTemplateGenerator { Configuration cfg = null; public HtmlTemplateGenerator(String templatePath) throws IOException { cfg = new Configuration(); cfg.setDefaultEncoding("UTF-8"); cfg.setDirectoryForTemplateLoading(new File(templatePath)); cfg.setObjectWrapper(new DefaultObjectWrapper()); } /** * 生成静态文件 * @param ftlTemplate ftl模版文件 * @param contents ftl要用到的动态内容 * @param savePath 文件保存路径 * @param saveFilename 保存文件名 * @throws IOException * @throws TemplateException */ public void create(String ftlTemplate, Map contents, String savePath, String saveFilename) throws IOException, TemplateException { Template temp = cfg.getTemplate(ftlTemplate); /* Merge data model with template */ String realPath = ServletActionContext.getServletContext().getRealPath(savePath); System.out.println( saveFilename + ":" + realPath); File file = new File(realPath); if(!file.exists()) file.mkdirs(); Writer out = new OutputStreamWriter(new FileOutputStream(realPath + "/" + saveFilename),"UTF-8"); temp.process(contents, out); out.flush(); } }
如果用spring,可以将它配置成bean,然后在其他地方使用。第五行的 templatePath 是模版文件的路径,比如/WEB-INF/template。 方法二:继承webwork的FreemarkerResult,改写getWriter方法: java 代码
protected Writer getWriter() throws IOException { String savePath = (String) ActionContext.getContext().getSession().get("SAVE_PATH"); String saveFilename = (String) ActionContext.getContext().getSession().get("SAVE_FILENAME"); String realPath = ServletActionContext.getServletContext().getRealPath(savePath); System.out.println( saveFilename + ":" + realPath); File file = new File(realPath); if(!file.exists()) file.mkdirs(); return templateOut = new OutputStreamWriter(new FileOutputStream(realPath + "/" + saveFilename),"UTF-8"); }
这里的路径和文件名通过webwork的session传入,不知有无其他好方法。
template.process(model, getWriter()); template.process(model, super.getWriter()); //添加这句 templateOut.flush();
生成的文件格式不限于html,可以是其他文件格式,如js,text等。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |