package com.kingschan.blog.common.freemarker.util;
import java.io.File;
import java.io.StringWriter;
import java.util.Locale;
import java.util.Map;
import com.kingschan.blog.common.freemarker.template.StringTemplateLoader;
import com.kingschan.blog.util.PathUtil;
import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
/**
* freemarker 模板解析器
* @author kings.chan
* 2016-06-26
*
*/
public class FreemarkerParseUtil {
/**
* 解析模板返因String
* String.format("%s/%s", PathUtil.getWebInfPath(),"\\email-template\\"))
* @param data 数据模型
* @param templateFolder 模板目录
* @param templateName 模板名称
* @return
* @throws Exception
*/
public static String parserFileTemplate(Map<String, Object> data,String templateFolder,String templateName) throws Exception{
/* 在整个应用的生命周期中,这个工作你应该只做一次。 */
/* 创建和调整配置。 */
String encode="UTF-8";
Configuration cfg = new Configuration();
cfg.setDirectoryForTemplateLoading(new File(templateFolder));
cfg.setObjectWrapper(new DefaultObjectWrapper());
cfg.setDefaultEncoding(encode);
cfg.setOutputEncoding(encode);
cfg.setEncoding(Locale.CHINA,encode);
/* 在整个应用的生命周期中,这个工作你可以执行多次 */
/* 获取或创建模板*/
Template temp = cfg.getTemplate(templateName);
temp.setEncoding(encode);
/* 创建数据模型 */
/* 将模板和数据模型合并 */
// Writer out = new OutputStreamWriter(System.out);
StringWriter writer = new StringWriter();
temp.process(data, writer);
// out.flush();
return writer.toString();
}
/**
* 解析freemarker 字符串并返回内容
* @param freemarkerStr
* @param data
* @return
* @throws Exception
*/
public static String parserString(String freemarkerStr,Map<String, Object> data) throws Exception{
Configuration cfg = new Configuration();
cfg.setTemplateLoader(new StringTemplateLoader(freemarkerStr));
cfg.setDefaultEncoding("UTF-8");
Template template = cfg.getTemplate("");
StringWriter writer = new StringWriter();
template.process(data, writer);
return writer.toString();
}
public static void main(String[] args) throws Exception {
String s=FreemarkerParseUtil.parserFileTemplate(null, String.format("%s/%s", PathUtil.getWebInfPath(),"\\email-template\\"), "findpsw.html");
System.out.println(s);
}
}