数据模型——方法
.
方法变量在存于实现了
TemplateMethodModel
接口的模板中。这个接口包含一个方法:
TemplateModel exec(java.util.List arguments)
。当使用
方法调用表达式
调用方法时,
exec
方法将会被调用。形参将会包含FTL方法调用形参的值。
exec
方法的返回值给出了FTL方法调用表达式的返回值。
TemplateMethodModelEx
接口扩展了
TemplateMethodModel
接口。它没有添加任何新方法。 事实上这个对象实现这个
标记
接口是给FTL引擎暗示, 形式参数应该直接以
TemplateModel
的形式放进
java.util.List
。否则将会以
String
形式放入list。
注:
TemplateMethodModel
接口官方已经不推荐使用,而是推荐使用
TemplateMethodModelEx
这个接口。
例如:下面这个方法,返回第一个字符串在第二个字符串第一次出现时的索引位置, 如果第二个字符串中不包含第一个字符串,则返回-1:
public class IndexOfMethod implements TemplateMethodModelEx {
public TemplateModel exec(List args) throws TemplateModelException {
if (args.size() != 2) {
throw new TemplateModelException("Wrong arguments");
return new SimpleNumber(
((String) args.get(1)).indexOf((String) args.get(0)));
Map dataMap = new HashMap();
dataMap.put("indexOf", new IndexOfMethod());
Template template = cfg.getTemplate("a.ftl");
StringWriter out = new StringWriter();
template.process(dataMap, out);
out.flush();
System.out.println(out.getBuffer().toString());
a.ftl文件内容为:${indexOf("met", "something")}
将会输出:2
如果需要访问FTL运行时环境(读/写变量,获取本地化信息等),则可以使用Environment.getCurrentEnvironment()
来获取。
freemarker自定义方法官网手册实现方法调用方法官网手册数据模型——方法.方法变量在存于实现了TemplateMethodModel接口的模板中。这个接口包含一个方法:TemplateModel exec(java.util.List arguments)。当使用方法调用表达式调用方法时,exec方法将会被调用。形参将会包含FTL方法调用形参的值。exec方法的返回值给出了FTL方法调用表达式的返回值。TemplateMethodModelEx接口扩展了TemplateMethodModel接
要想使用Freemarker支持的自定义方法,需要实现freemarker.template.TemplateMethodModel接口,然后将方法对象放入到Freemarker的数据模型中,这样在ftl文件中便可以像使用Freemarker内置方法一样使用该方法了。
[code="java"]/**
* Freemarker自定义方法
* 实现response.encode...
<#assign list = sqlt.sqlQueryForList("todo_list.getList")>
在sql文件夹下创建todo_list.sql文件,书写sql语句
-- [getList] 获取列表信息
select * from "list" ORDER BY seq
1.list = sqlt.sqlQueryForList("t...
<#assign var1 = sort_int(var)/>
实现一个自定义函数
在java中定义一个类,实现TemplateMethodModelEx,并实现其exce方法
public class SortMethod implements TemplateMethodModelEx {
最近在项目开发中使用了freemarker,并在前台显示文本时遇到这样一个需求,当长度超过10个字时只显示出前面10个字,并在后面加...。这里就可以在freemarker中实现一个自定义方法变量。
实现自定义方法变量基本步骤:
1.先实现TemplateMethodModel或TemplateMethodModelEx接口(TemplateMethodModelEx 继承自TemplateMethodModel 接口,我这里使用的是TemplateMethodModelEx接口),再覆盖该接口的Ob..
在项目中有一个需求,每个物品有一个guid,存在数据库中,而在页面上需要显示一个对应的业务数据值,暂且叫做serverId,serverId是通过guid移位计算得来。serverId只需要显示,后台并不需要使用。
因为serverId在后台用不到,所以就没有使用VO字段来存储,项目使用了Freemarker作为view层的模板引擎。了解到Freemarker的一个特点是具有很多内置的功能强...
Freemarker中如何遍历List摘要:在Freemarker应用中经常会遍历List获取需要的数据,并对需要的数据进行排序加工后呈现给用户。那么在Freemarker中如何遍历List,并对List中数据进行适当的排序呢?通过下文的介绍,相信您一定会找到答案。
一、Freemarker中list指令简单介绍要想在Freemarker中遍历list,必须通过使用lis...