要想使用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输出的结果。

巧用Freemarker的自定义方法的更多相关文章

  1. 巧用freemarker

    使用Freemarker宏进行可扩展式模块化编程 该文是转载而来,并非我本人所写,但是觉得真心不错,所以收藏一下 一.前言 今天的文章聊一下freemarker的一些特性:宏,我们将使用它写出一些模块 ...

  2. Freemarker自定义方法

    在项目中有一个需求,每个物品有一个guid,存在数据库中,而在页面上需要显示一个对应的业务数据值,暂且叫做serverId,serverId是通过guid移位计算得来.serverId只需要显示,后台 ...

  3. [转]一篇很全面的freemarker教程

    copy自http://demojava.iteye.com/blog/800204 以下内容全部是网上收集: FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主 ...

  4. 一篇很全面的freemarker教程

    以下内容全部是网上收集: FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主要由如下4个部分组成:1,文本:直接输出的部分2,注释:<#-- ... --& ...

  5. FreeMarker的教程

    copy自http://demojava.iteye.com/blog/800204 以下内容全部是网上收集: FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主 ...

  6. FreeMarker备忘

    以下内容全部是网上收集: FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主要由如下4个部分组成: ,文本:直接输出的部分 ,注释:<#-- ... --& ...

  7. 【转】一篇很全面的freemarker教程---有空慢慢实践

    FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主要由如下4个部分组成: 1,文本:直接输出的部分 2,注释:<#-- ... -->格式部分,不会输 ...

  8. freemarker入门教程

    FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主要由如下4个部分组成: 1,文本:直接输出的部分 2,注释:<#-- ... -->格式部分,不会输 ...

  9. FreeMarker的模板文件语法

    FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主要由如下4个部分组成: 1,文本:直接输出的部分 2,注释:<#-- ... -->格式部分,不会输 ...

随机推荐

  1. MongoDB权限管理之用户名和密码的操作

    MongoDB默认是不需要输入用户名和密码,客户就可以登录的.但是出于安全性的考虑,我们还是要为其设置用户名和密码.本文主要介绍的是MongoDB权限管理之用户名和密码的操作,希望能对您有所帮助. 本 ...

  2. N天前涨停过的票

    zd(0,300,10)B2:=REF(C,1)*1.1-C;B3:BARSLAST(B2<0.01)=ZD01;{n天前涨停股票}

  3. python之时间函数

    import time print(time.clock())print(time.process_time())print(time.time()) #返回当前系统时间戳print(time.cti ...

  4. nginx 注册为服务

    使用java service wrapper将java程序注册为windows服务 分类:Java (5677)  (8) 将java注册为windows服务后,我们就直接可以通过windows的服务 ...

  5. HDP2.4安装(一):Centos7安装

    在进入大数据领域来,一直使用微软的Azure HDInsight,当前在中国区仅支持在Windows系统上部署集群,虽然创建的过程很简单,但对于开发人员来说,就是一个黑盒子,在更深入的研究和开发扩展的 ...

  6. [转]谈谈select, iocp, epoll,kqueue及各种网络I/O复用机制

    参考原文:再谈select, iocp, epoll,kqueue及各种I/O复用机制 一.I/O模型概述 介绍几种常见的I/O模型及其区别,如下: blocking I/O nonblocking ...

  7. IOS-归档的使用

    归档又叫序列化(coding) //   归档NSKeyedArchiver //   解归档NSKeyedUnarchiver // 归档之后的文件 会被加密 //  可以归档的文件.数据--> ...

  8. 剑指offer系列22--二叉树中和为某一值的路径

    22[题目]输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径. * 路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径 * [思路]只要从根结点到叶结点一条一条遍 ...

  9. bzoj2537: [neerc2007]Language Recognition

    Description DFA(确定性有限状态自动机)是一个有向图,顶点称为状态,边称为转移.每个转移用一个字母标记.对于每个状态s和每个转移l,至多有一个转移从s出发且标记为l.DFA有一个初始状态 ...

  10. Understanding and Managing SMTP Virtual Servers

    Simple Mail Transfer Protocol (SMTP) Service Overview The Simple Mail Transfer Protocol (SMTP) servi ...