首页 > 代码库 > 巧用Freemarker的自定义方法

巧用Freemarker的自定义方法

要想使用Freemarker支持的自定义方法,需要实现freemarker.template.TemplateMethodModel接口,然后将方法对象放入到Freemarker的数据模型中,这样在ftl文件中便可以像使用Freemarker内置方法一样使用该方法了。 

import java.util.List;  import javax.servlet.http.HttpServletResponse;  import freemarker.template.TemplateMethodModel;  import freemarker.template.TemplateModelException;    /**  * Freemarker自定义方法  * 实现response.encodeURL(url)功能  */  public class EncodeURLMethod implements TemplateMethodModel {            private HttpServletResponse response;            /**      * 带参数的构造函数      * @param response HttpServletResponse对象      */      public EncodeURLMethod(HttpServletResponse response)      {          this.response=response;      }        /**      * 执行方法      * @param argList 方法参数列表      * @return Object 方法返回值      * @throws TemplateModelException      */      public Object exec(List argList) throws TemplateModelException {          if(argList.size()!=1)   //限定方法中必须且只能传递一个参数          {              throw new TemplateModelException("Wrong arguments!");          }          //返回response.encodeURL执行结果          return response.encodeURL((String)argList.get(0));      }  }  

输出模版数据模型时,将EncodeURLMethod的实例对象放入模型中:

dataMap.put("encodeURL", new EncodeURLMethod(context.getResponse()));  

在Freemarker模版文件中这样使用:

${encodeURL("/news/showNews.sf?id=123456")}  

输出结果实际就是使用response.encodeURL输出的结果。