首先,先创建一个ftl文件:
Html代码
Html代码
- <div style="width:100%;font-size:12px;">Hello ${name}(${getUserAge(name)})</div>
之后,创建一个java应用程序类:
Java代码
Java代码
- 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();
- }
- }
由于有用到自定义方法,因此在建个方法类:
Java代码
Java代码
- 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));
- }
- }
运行后,得到所要的结果