月度归档:2012年10月

freemarker模板中使用自定义函数

freemarker提供了很多内置函数,可以对数据进行一些简单的处理如字符串操作。另外,freemarker也提供了在模板中使用自定义函数的方法。具体操作如下:

1. 提供一个实现了TemplateMethodModel接口的类,重写这个接口中的public Object exec(List args)方法。自定义函数的参数按声明的顺序存储在List args中,可通过args.get(i)方式遍历。
2. ftl模板通过类的全路径(包名+类名)来new一个函数实例。例如:

1
<#assign foo="com.test.util.ftl.Foo"?new()>

3. 在用到该函数的地方,调用上步中实例化的foo函数。

1
<#assign result = foo(arg)>

result是该自定义函数的返回结果,它的使用方法与一般的freemarker插值(变量)并无差别。

在一些spring接管对象生命周期管理的应用中,如果自定义函数实现类中用到了spring的依赖注入,会出现注入失败的情况。这是因为自定义函数的实例是在ftl模板中new出来的,就好像在代码中直接new Object()一样,没有启用spring的依赖管理。所以,freemarker自定义函数比较适合处理那种无状态的操作,如编码、解码等。

--EOF--