标签:style blog java color 使用 strong 数据 io
自定义函数和指令都可以在前台或者后台进行指定。
使用以下格式调用自定义指令:
<@user_def_dir_exp param1=val1 param2=val2 ... paramN=valN/>
<#macro name param1 param2 ... paramN> ... <#nested loopvar1, loopvar2, ..., loopvarN> ... <#return> ... </#macro>
例子:
<#macro test foo bar baaz> Test text, and the params: ${foo}, ${bar}, ${baaz} </#macro> <#-- call the macro: --> <@test foo="a" bar="b" baaz=5*5-2/>
输出结果:
Test text, and the params: a, b, 23
Java程序员可以使用TemplateDirectiveModel接口在Java代码中实现自定义指令。详情可以参加API文档。
注意:
TemplateDirectiveModel在FreeMarker 2.3.11版本时才加入。用来代替快被废弃的TemplateTransformModel。
public class UpperDirective implements TemplateDirectiveModel { public void execute(Environment env, Map params, TemplateModel[] loopVars, TemplateDirectiveBody body) throws TemplateException, IOException { //TODO 具体的业务逻辑 } }
例子:
foo <@upper> bar <#-- 这里允许使用所有的FTL --> <#list ["red", "green", "blue"] as color> ${color} </#list> baaz </@upper> wombat
输出结果:
foo
BAR
RED
GREEN
BLUE
BAAZ
wombat
使用类似格式 ${avg(10, 20)} 其中avg为函数名,10,20为传入的参数
<#function name param1 param2 ... paramN> ... <#return returnValue> ... </#function>
例子:
<#function avg x y> <#return (x + y) / 2> </#function>
输出结果:
15
方法变量在存于实现了TemplateMethodModel接口的模板中。这个接口仅包含一个方法:TemplateModel exec(java.util.List arguments)。当使用方法调用表达式调用方法时,exec方法将会被调用。形参将会包含FTL方法调用形参的值。exec方法的返回值给出了FTL方法调用表达式的返回值。
TemplateMethodModelEx接口扩展了TemplateMethodModel接口。它没有任何新增的方法。事实上这个对象实现这个标记接口暗示给FTL引擎,形式参数应该直接以TemplateModel-s形式放进java.util.List。否则将会以String-s形式放入List。
public class IndexOfMethod implements TemplateMethodModel { 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))); } }
然后将实例放入到根数据模型中:
root.put("indexOf", new IndexOfMethod());
例子:
<#assign x = "something"> ${indexOf("met", x)} ${indexOf("foo", x)}
输出结果:
2 -1
Freemaker 自定义指令和函数,布布扣,bubuko.com
标签:style blog java color 使用 strong 数据 io
原文地址:http://www.cnblogs.com/beiyeren/p/3873683.html