freemarker 自定义指令
freemarker是一款模板引擎,自己定义了很多指令。
如:
if指令
<#if condition>
....
<#elseif condition2>
….
<#else>
...
</#if>
switch、case、default、break指令
<#switch value>
<#case refValue>
...
<#bread>
<#case refValue>
...
<#bread>
<#default>
...
</#switch>
list指令
<#list sequence as item>
...
</#list>
等等。同时,还可以制定化一些业务指令。自定义指令把’#’换成了’@’,样式为:
<@MyDirective>
….
</@MyDirective>
自定义指令第一步,需要定义一个指令处理类。该指令处理类,需要继承自接口freemarker.template.TemplateDirectiveModel 。
如:
public class MyDirective implements TemplateDirectiveModel { public void execute(Environment env, @SuppressWarnings("rawtypes") Map params, TemplateModel[] loopVars, TemplateDirectiveBody body) throws TemplateException, IOException { env 是模板引擎的环境对象 params 是指令设定的属性名和属性值组成的map,如:<@MyDirective aaa=“A” bbb=“B”>中的 aaa:A ,bbb:B body 表示标签内部内容的输出 .... } }
第二步 ,创建对象,添加到freemarker指令集合内部。
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> .... <property name="freemarkerVariables"> <map> <entry key=“MyDirective" value-ref=“MyDirective" /> .... </map> </property> </bean> <bean id=“MyDirective" class="com.sten.directive.MyDirective"/>
最后就可以在项目中使用该指令了
松下问童子,言师采药去。
只言此山中,云深不知处。