java中freemarker通过实现TemplateDirectiveModel接口,用户可以自定义标签(指令)进行任意操作,任意文本写入模板的输出。
定义
public void execute(Environment env, Map params, TemplateModel[] loopVars, TemplateDirectiveBody body) throws TemplateException, IOException;
env:系统环境变量,通常用它来输出相关内容,如Writer out = env.getOut()。
params:自定义标签传过来的对象,其key=自定义标签的参数名,value值是TemplateModel类型,而TemplateModel是一个接口类型,通常我们都使用TemplateScalarModel接口来替代它获取一个String 值,如TemplateScalarModel.getAsString();当然还有其它常用的替代接口,如TemplateNumberModel获取number,TemplateHashModel等。
loopVars 循环替代变量。
body 用于处理自定义标签中的内容,如<@myDirective>将要被处理的内容/@myDirective;当标签是<@myDirective />格式时,body=null。
创建自定义标签
1. 实现TemplateDirectiveModel这个接口中的execute方法