zoukankan      html  css  js  c++  java
  • 巧用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输出的结果。

  • 相关阅读:
    关于串通京东接口的demo
    http链接中请求进行编码,Http请求api
    RabbitMQ 创建用户和创建Virtual host
    dedecms调用当前栏目的子栏目及子栏目文章
    dede调出所有栏目以及栏目下的二级栏目
    JS判断移动端访问设备并加载对应CSS样式
    border-style
    网页色阶表
    破解centos7 密码
    DEDECMS打开网站后台系统首页卡解决方法
  • 原文地址:https://www.cnblogs.com/eastson/p/3914485.html
Copyright © 2011-2022 走看看