`
流浪鱼
  • 浏览: 1637424 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

自定义指令macro

 
阅读更多

宏参数的真实值是可以作为变量(person)放在宏定义体中的。使用预定义指令时,参数的值(=号后边的值)可以是FTL表达式。这样,不像HTML,"Fred"和"Batman"的引号就可以不用要了。<@greet person=Fred/>也意味着使用变量的值Fred作为person参数,而不是字符串"Fred"。当然参数值并不一定是字符串类型,也可以是数字,布尔值,哈希表,序列等…也可以在=号左边使用复杂表达式(比如someParam=(price + 50)*1.25)。

自定义指令可以有多个参数:

<#macro greet person color>
<font size="+2" color="${color}">Hello ${person}!</font>
</#macro>

 当调用这个宏的时候,你仅仅可以使用在macro指令中定义的参数,同时也必须给出在宏中定义所有参数的值。

 

给定默认值

很多情况下需要给一个参数指定一个相同的值,所以我们仅仅想在这个值发生变化后重新赋给变量。那么要达到这个目的,在macro指令中必须这么来指定变量:param_name=usual_value。

例如:

<#macro greet person color="black">
<font size="+2" color="${color}">Hello ${person}!</font>
</#macro>

 

根据FTL表达式规则,明白下面这一点是至关重要的,someParam=foo和someParam="${foo}"是不同的。第一种情况,是把变量foo的值作为参数的值来使用。第二种情况则是使用插值形式的字符串,那么参数值就是字符串了,这个时候,foo的值呈现为文本,而不管foo是什么类型(数字,日期等)的。看下面这个例子:someParam=3/4和someParam="${3/4}"是不同的,如果指令需要someParam是一个数字值,那么就不要用第二种方式。切记不要改变这些。

 

 

嵌套内容

自定义指令可以嵌套内容,和预定义指令相似:<#if ...>nested content</#if>。比如,下面这个例子中是创建了一个可以为嵌套的内容画出边框:

<#macro border>
<table border=4 cellspacing=0 cellpadding=4><tr><td>
<#nested>
</td></tr></table>
</#macro>

 <#nested>指令执行位于开始和结束标记指令之间的模板代码段。

nested指令也可以多次被调用

例如:

<#macro do_thrice>
<#nested>
<#nested>
<#nested>
</#macro>
<@do_thrice>
Anything.
</@do_thrice>

嵌套的内容可以是任意有效的FTL,包含其他的用户自定义指令

例如:

<@border>
<ul>
<@do_thrice>
<li><@greet person="Joe"/>
</@do_thrice>
</ul>
</@border>

 在嵌套的内容中,宏的局部变量是不可见的

<#macro repeat count>
<#local y = "test">
<#list 1..count as x>
${y} ${count}/${x}: <#nested>
</#list>
</#macro>
<@repeat count=3>${y!"?"} ${x!"?"} ${count!"?"}</@repeat>

 将会打印:

test 3/1: ? ? ?
test 3/2: ? ? ?
test 3/3: ? ? ?

 因为y,x和count是宏的局部(私有)变量,从宏外部定义是不可见的

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    开源免费宏自动化工具 Pulover’s Macro Creator 5.4.0 中文免费版.zip

    无论您是需要插入自定义代码的程序员,还是开发人员测试应用程序功能并做出响应的开发人员,都可以轻松地为您提供帮助。 无需使用任何程序设计知识即可使用 Pulover Macro Creator,因为该应用程序设计为易于使用。...

    开源免费宏自动化工具 Pulover’s Macro Creator 5.4.0.zip

    无论您是需要插入自定义代码的程序员,还是开发人员测试应用程序功能并做出响应的开发人员,都可以轻松地为您提供帮助。 无需使用任何程序设计知识即可使用 Pulover Macro Creator,因为该应用程序设计为易于使用。...

    freemarker总结

    6、 用户自定义FTL指令:宏和变换器 7、 节点 节点变量表示为树型结构中的一个节点,通常在XML处理中使用。 在模板里对sequences和hashes初始化 sequences 1. [“you”,”me”,”he”] 2. 1..100 3. [ {“Akey...

    MSDEV.EXE-应用程序错误解决办法.

    重新打开VC6,Tools-&gt;Customize-&gt;Add-ins and Macro Files,选中FileTool Developer Studio Add-in即可。 此时打开VC6会有一个浮动工具栏(A O),点击A就是添加文件到工程,点击O就是打开文件。是不是很怪啊,竟然...

    freemarker+struts2仿QQ分页效果

    不过由于小弟资历浅薄,也没心思看,主要是strut2的标签本来我就觉得不大习惯,另外上个月接触了freemarker后,实在是用的爽死了,为什么不用freemarker的macro指令写个通用的分页呢?马上想到模仿TX的...

    freemarker语法完整版

    B 指令 if, else, elseif 语法 Java代码 &lt;#if condition&gt; ... &lt;#elseif condition2&gt; ... &lt;#elseif condition3&gt; ... ... &lt;#else&gt; ... &lt;/#if&gt; ... ... ... ... ... 用例 ...

    FreeMarker中文指导手册

    4.1 自定义指令 ................................................................................................ 45 4.2 在模板中定义变量 ...................................................................

    FreeMarker 手册

    4.1 自定义指令 ................................................................................................ 45 4.2 在模板中定义变量 ...................................................................

    TREX说明书

    常用指令 1、 关头 Depophd 1,X 2、 配47 Re47 3、 格式化 Fmtunit 4、 启动自校 Sf 5、 备份固件 Sv53,sv58 6、 写全部固件 Wr53,wr58 7、 自动更换替换固件 Swap53,swap58 8、 写01扇区 wrdir 9、 格式化固件区 ...

    超完整FreeMarker中文教程,代码

    4.1 自定义指令 ................................................................................................ 46 4.2 在模板中定义变量 ...................................................................

    QAC工具介绍和使用说明(供一种可量化措施的代码度量值属性:33基于功能 32基于文件和4个项目级别)

    如上所述:QAC随提供一套标准库的头文件,如果想改变这些类型定义,必须先明白QAC内部的定义类型,因为那些头文件包含一些声明ptrdiff_t, size_t 和wchar_t,还有3种宏指令定义PRQA_PTRDIFF_T, PRQA_SIZE_T,和PRQA_...

Global site tag (gtag.js) - Google Analytics