首页 > 代码库 > 巧用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输出的结果。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。