Freemarker的自定义方法

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

/**  
 * 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));   
    }   
}
 

使用:

@Controller
public class HelloWord {
   @RequestMapping("/fltMethod")
   public String templateMethodModel(Modelmodel,HttpServletResponse response)
    {
    model.addAttribute("encodeURL", new EncodeURLMethod(response));   
    return ("fltMethod.ftl");
    }
}
${encodeURL("/news/showNews.sf?id=123456")}

相关推荐