FreeMarker 自定义方法(二)

1. 模板文件 test303.ftl<#assign x = “something”>${indexOf(“met”, x)}${indexOf(“foo”, x)}2. 自定义方法 IndexOfMethod.javaps: 返回第一个字符串在第二个字符串第一次出现时的索引位置,如果第二个字符串中不包含第一个字符串。package com.freemarker.test03.Method;import java.util.List;import freemarker.template.SimpleScalar;import freemarker.template.TemplateMethodModelEx;import freemarker.template.TemplateModelException;import freemarker.template.TemplateScalarModel;{@Overridepublic Object exec(List args) throws TemplateModelException {String s1 = “”;String s2 = “”;if (args.size() != 2) {throw new TemplateModelException(“Error: Expecting 2 string arguments here”);}try {TemplateScalarModel tsm = (TemplateScalarModel) args.get(0);s1 = tsm.getAsString();TemplateScalarModel tsm2 = (TemplateScalarModel) args.get(1);s2 = tsm2.getAsString();} catch (ClassCastException cce) {String mess = “Error: Expecting string argument here”;throw new TemplateModelException(mess);}SimpleScalar(getStrPosition(s1, s2));}/**** deception: 返回第一个字符串在第二个字符串第一次出现时的索引位置, 如果第二个字符串中不包含第一个字符串,则返回“-1”* function: author:hsl data:Jul 13, 2015** @param s1* @param s2* @return String*/private String getStrPosition(String s1, String s2) {return String.valueOf(s2.indexOf(s1));}}3. 测试类文件 Test.javapackage com.freemarker.test03.Method;import freemarker.template.*;import java.util.*;import java.io.*;public class Test {(String[] args) throws Exception {// 创建 Freemarker 配置实例Configuration cfg = new Configuration(Configuration.VERSION_2_3_23);// 指定模板文件从何处加载的数据源,这里设置成一个文件目录。cfg.setDirectoryForTemplateLoading(new File(“templates”));cfg.setDefaultEncoding(“UTF-8”);// 简单地重新抛出异常; 这应该在大多数生产系统中使用。cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);// 创建一个数据模型Map root = new HashMap();// 调用自定义方法 ————————————-root.put(“indexOf”, new IndexOfMethod());// 获取模板(使用内部缓存)Template temp = cfg.getTemplate(“test03.ftl”);// 合并数据模型模板Writer out = new OutputStreamWriter(System.out);temp.process(root, out);out.flush();out.close();// 注意: ————// 为了简单起见,这里压制了异常(在方法签名中声明了异常,译者注),而在正式运行的产品中不要这样做。}}运行结果2-1

,因为有梦,所以勇敢出发,选择出发,便只顾风雨兼程。

FreeMarker 自定义方法(二)

相关文章:

你感兴趣的文章:

标签云: