【FreeMarker】【模板文件FTL】模板自定义指令 macro
2016-03-04 00:22
274 查看
自定义指令macro
自定义指令可以使用 macro 指令来定义,这是模板设计者所关心的内容。Java程序员若不想在模板中实现定义指令,而是在Java语言中实现指令的定义,这时可以使用freemarker.template.TemplateDirectiveModel类来扩展(后续章节)。宏是有一个变量名的模板片段。你可以在模板中使用宏作为自定义指令,这样就能进行重复性的工作。
例如:
[html] view
plain copy
<#macro greet>
<font size="+2">Hello Joe!</font>
</#macro>
macro指令自身不打印任何内容,它只是用来创建宏变量,所以就会有一个名为greet的变量。在<#macro greet>和</#macro>之间的内容(称为宏定义体)当使用它作为指令时将会被执行。你可以在FTL标记中通过@代替#来使用自定义指令。使用变量名作为指令名。而且,自定义指令的结束标记也是需要的。
[html] view
plain copy
<@greet></@greet>
或者
<@greet/>
打印出:
[html] view
plain copy
<font size="+2">Hello Joe!</font>
macro参数
在macro指令中,宏名称的后面位置是用来定义变量的。例如:
[html] view
plain copy
<#macro greet person>
<font size="+2">Hello ${person}!</font>
</#macro>
按如下使用这个宏:
[html] view
plain copy
<@greet person="Fred"/> and <@greet person="Batman"/>
打印出:
[html] view
plain copy
<font size="+2">Hello Fred!</font>
and <font size="+2">Hello Batman!</font>
使用预定义指令时,参数的值(=号后边的值)可以是FTL表达式。
自定义指令可以有多个参数。
例如:
[html] view
plain copy
<#macro greet person color>
<font size="+2" color="${color}">Hello ${person}!</font>
</#macro>
按如下使用:
[html] view
plain copy
<@greet person="Fred" color="black"/>
或
<@greet color="black" person="Fred"/>
参数的顺序并不重要。
可以指定参数的默认值。
例如:
[html] view
plain copy
<#macro greet person color="black">
<font size="+2" color="${color}">Hello ${person}!</font>
</#macro>
嵌套macro内容
自定义指令可以嵌套内容。例如:
[html] view
plain copy
<#macro border>
<table border=4 cellspacing=0 cellpadding=4><tr><td>
<#nested>
</td></tr></table>
</#macro>
按如下使用:
[html] view
plain copy
<@border>The bordered text</@border>
输出:
[html] view
plain copy
<table border=4 cellspacing=0 cellpadding=4><tr><td>
The bordered text
</td></tr></table>
nested指令可以多次被调用。
例如:
[html] view
plain copy
<#macro do_thrice>
<#nested>
<#nested>
<#nested>
</#macro>
<@do_thrice>
Anything.
</@do_thrice>
输出:
[html] view
plain copy
Anything.
Anything.
Anything.
macro和循环变量
使用命名空间组织macro
参见命名空间一节。
相关文章推荐
- 利用Sublime实现Evernote高亮代码的尝试
- 排序1--冒泡排序
- OpenCV 三种图像遍历方法
- 2016.3.3有感
- 二分法查找/折半查找
- 数据结构(17)--图的遍历DFS和BFS
- 学习记录:树 (-)
- Mac下通过镜像下载Android源代码
- poj 3267 the cow lexicon
- 怎样用vs 2008 编译C程序
- centos(linux) 下如何查看端口占用情况及杀死进程
- APP开发感受分享
- IDEA MAVEN使用初探
- 分布式服务框架 dubbo/dubbox 的搭建
- [LeetCode]215 数组第k大的数
- Windows常见DOS命令
- 谨以此纪念即将诞生的《江湖X》
- SPRING IN ACTION 第4版笔记-第四章ASPECT-ORIENTED SPRING-012-AOP总结
- 不知哪来的AVFoundation代码,好像不是iOS的
- HTTPS科普扫盲帖