package com.norteksoft.product.util; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.StringReader; import java.io.StringWriter; import java.util.Locale; import java.util.Map; import freemarker.template.Configuration; import freemarker.template.SimpleHash; import freemarker.template.Template; public class StringTemplateRender implements TemplateRender { private static Configuration config = null; public static StringTemplateRender getInstance() { return new StringTemplateRender(); } public StringTemplateRender() { if (config == null) { config = new Configuration(); config.setTemplateLoader(new StringTemplateLoader()); try { config.setSetting("datetime_format", "yyyy-MM-dd HH:mm:ss"); config.setLocale(Locale.CHINA); } catch (Exception ex) { ex.printStackTrace(); } } } @SuppressWarnings("unchecked") public String render(Object dataModel, String text) throws Exception { String ret = null; if ((dataModel instanceof Map) == false) { throw new IllegalArgumentException("参数dataModel必须为一个Map对象"); } BufferedReader reader=null; StringWriter stringWriter=null; BufferedWriter writer=null; try { reader= new BufferedReader(new StringReader(text)); Template template = new Template(null, reader, config, "UTF-8"); SimpleHash root = new SimpleHash(); root.putAll((Map) dataModel); stringWriter= new StringWriter(); writer = new BufferedWriter(stringWriter); template.process(root, writer); writer.flush(); ret = stringWriter.toString(); } catch (Exception ex) { ex.printStackTrace(); ret = null; }finally{ reader.close(); stringWriter.close(); writer.close(); } return ret; } }