freemarker之模板开发(其它之自定义指令)
freemarker之模板开发(其它之自定义指令)
----------
自定义指令可以使用macro指令来定义,这是模板设计者所关心的内容。Java程序员若不想在模板中实现自定义指令,而是在java语言中实现指令的定义,这时可以使用:freemarker.template.TemplateDirectiveModel类来扩展。
?
宏
宏是有一个变量名的模板片段。你可以在模板中使用宏作为自定义指令,这样就能进行重复性的工作。
如例:
那么,这个宏就可以这样来使用:
同时也必须给出在宏中定义所有参数的值。如果你尝试<@greet person="Fred"/>时也会发生错误,因为忘记指定color的值了。?
根据FTL表达式规则,明白下面这一点是至关重要的,someParam=foo和someParam="${foo}"是不同的。第一种情况,是把变量foo的值作为参数的值来使用。第二种情况则是使用插值形式的字符串,那么参数值就是字符串了,这个时候,foo的值呈现为文本,而不管foo是什么类型的。
宏参数的另外一个重要的方面是它们是局部变量。
?
嵌套内容
自定义指令可以嵌套内容,和预定义指令相似。如:?
<@do_thrice ; x>${x} Anything.</@do_thrice>将会输出:
1 Anything.
2 Anything.
3 Anything.
nested指令(当然参数可以是任意的表达式)的参数,循环变量的名称是在自定义指令的开始标记(<@...>)的参数后面通过分号确定的。 ? ? ? ?