当前位置: 首页 > 工具软件 > Freemarker.js > 使用案例 >

freemarker 模版生成文件

欧阳嘉
2023-12-01

网上找了点资料,自动生成html文件,下载jar包,创建共通方法,分装数据。调用生成。

import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.Locale;
import java.util.Map;

import org.apache.struts2.ServletActionContext;


import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import freemarker.template.TemplateExceptionHandler;

public class FreemarkerUtils {
    
    private static Configuration cfg = null;

    /**
     * 获取freemarker的配置 freemarker本身支持classpath,目录和从ServletContext获取.
     * @return 返回Configuration对象
     */
    private static Configuration getConfiguration() {
        if (null == cfg) {
            cfg = new Configuration();
            // 这里有三种方式读取
            // (一个文件目录)
            // cfg.setDirectoryForTemplateLoading(new File("templates"));
            // classpath下的一个目录(读取jar文件)
            // cfg.setClassForTemplateLoading(this.getClass(),"/templates");
            // 相对web的根路径来说 根目录
            cfg.setServletContextForTemplateLoading(ServletActionContext.getServletContext(), "templates");
            // setEncoding这个方法一定要设置国家及其编码,不然在flt中的中文在生成html后会变成乱码
            cfg.setEncoding(Locale.getDefault(), "UTF-8");
            
            // 设置对象的包装器
            cfg.setObjectWrapper(new DefaultObjectWrapper());
            // 设置异常处理器//这样的话就可以${a.b.c.d}即使没有属性也不会出错
            cfg.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);

        }

        return cfg;
    }
    /**
     * 
     * @param ftl 模板文件名,相对上面的模版根目录templates路径,例如/module/view.ftl templates/module/view.ftl
     * @param data 填充数据
     * @param targetFile 要生成的静态文件的路径,相对设置中的根路径,例如 "jsp/user/1.html"
     * @return
     */
    public  static boolean createFile(String ftl, Map<String,Object> data, String targetFile) {

        try {
            // 创建Template对象
            Configuration cfg = FreemarkerUtils.getConfiguration();
            Template template = cfg.getTemplate(ftl);
            template.setEncoding("UTF-8");

            // 生成静态页面
            Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(targetFile), "UTF-8"));
            template.process(data, out);
            out.flush();
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        } catch (TemplateException e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }
}

数据封装调用

            HashMap map = new HashMap();
            map.put("image", re == null ? "" : FileHelper.addTimestamp(re.getUrl()));// 背景图片
            map.put("categorylist", list); // 子项目list
            map.put("size", list.size());  // 子项目size
            map.put("url", "phone!categorySearch?id="); // 子项目url链接
            map.put("basePath",FileHelper.combineBasePath()); // 网页base url
            
            // 生成HTML的完整路径
            String htmlFullPath = FileHelper.getHtmlAbsolutePath(template.getOutputPath(), category.getId());
            FreemarkerUtils.createFile("view.ftl", map, htmlFullPath);

页面展示

 <#list categorylist as category>
     
            <div class="ui-block-a"><a class="a1" href="${url}${category.id}" data-ajax = "false">${category.name}</a></div>
      
    </#list>



 类似资料: