Freemarker模板文件返回字符串
首先,先创建一个ftl文件:
<div style="width:100%;font-size:12px;">Hello ${name}(${getUserAge(name)})</div>
package freemarker;import java.io.File;import java.io.IOException;import java.io.StringWriter;import java.io.Writer;import java.util.HashMap;import java.util.Locale;import java.util.Map;import freemarker.template.Configuration;import freemarker.template.DefaultObjectWrapper;import freemarker.template.Template;import freemarker.template.TemplateException;/** * * @Desc 获取FTL文件生成的字符串,以供调用 * @author xujp1 * @version Revision: 1.00 Date: May 9, 2012 */public class GenerateStringFromFtl{ private static Configuration conf = null; public static void main(String args[]) { conf = new Configuration(); try { conf.setDirectoryForTemplateLoading(new File("WebRoot/WEB-INF/template")); } catch (IOException e) { e.printStackTrace(); } conf.setObjectWrapper(new DefaultObjectWrapper()); conf.setLocale(Locale.CHINA); conf.setSharedVariable("getUserAge", new GetUserAge());//自定义方法供调用 conf.setDefaultEncoding("utf-8"); conf.setClassicCompatible(true);//处理空值为空字符串 String tempReturn = ""; Map<String, Object> root = new HashMap<String, Object>(); String name = "xujp1"; root.put("name", name); try { tempReturn = generateHtmlFromFtl(root, "hellouser.ftl"); } catch (IOException e) { e.printStackTrace(); } catch (TemplateException e) { e.printStackTrace(); } System.out.println(tempReturn); } public static String generateHtmlFromFtl(Object root, String tempPath) throws IOException, TemplateException { Template temp = conf.getTemplate(tempPath); Writer out = new StringWriter(2048); temp.process(root, out); return out.toString(); }}
package freemarker;import java.util.List;import freemarker.template.SimpleScalar;import freemarker.template.TemplateMethodModel;import freemarker.template.TemplateModelException;/** * * @Desc freemarker中使用的方法,根据传入的参数返回相应的值 * @author xujp1 * @version Revision: 1.00 Date: May 9, 2012 */public class GetUserAge implements TemplateMethodModel{ /* (non-Javadoc) * @see freemarker.template.TemplateMethodModel#exec(java.util.List) */ @SuppressWarnings("unchecked") @Override public Object exec(List args) throws TemplateModelException { if(args.size() != 1) { throw new TemplateModelException("Wrong arguments!"); } int age = 0; if("xujp1".equalsIgnoreCase((String)args.get(0))) age = 25; else age = 24; return new SimpleScalar(String.valueOf(age)); }}