2009年4月15日星期三

FreeMarker中文手册--KLW 指令


指令
你使用FTL标签来调用指令.在例子中你调用了list指令,语法上,你使用了两个标签: <#list animals as being> 和 </#list>.

一共有两种标签:
  • 开始标签: <#directivename parameters>
  • 结束标签: </#directivename>
这和HTMl或者XML的语法类似,除了标签都是#开始的.如果标签没有嵌套内容(位于开始标签和结束标签之间的内容),你必须只使用开始标签而不是结束标签.例如你可以写 <#if something>...</#if>,但是include指令,只能这么写 <#include something>.因为FreeMarker知道include指令没有嵌套内容.

参数parameters 的格式有指令名directivename决定.

实际上有两类指令:预定义指令和用户定义指令.对于用户定义的指令,要使用@而不是#,比如<@mydirective parameters>...</@mydirective>.另外不同的是如果用户自定义的指令没有内嵌内容的话,必须这样使用: <@mydirective parameters />,类似于XML中<img ... />.但是用户自定义指令又是一个高级主题,详细见这里.

FTL标签,和HTML标签一样,必须被合适地嵌套.下面的代码是错误的.因为if指令既在内嵌的list指令中,又在它的外边:
<ul>
<#list animals as being>
<li>${being.name} for ${being.price} Euros
<#if user == "Big Joe">
(except for you)
</#list> <#-- WRONG! The "if" has to be closed first. -->
</#if>
</ul>
注意FreeMarker并不关心那些内嵌的HTML标签,只关心内嵌的FTL标签.它把HTML当做普通文本对待,不做任何翻译.

如果你使用一个不存在的指令(比如,你不小心把指令名字打错了),FreeMarker会停止翻译模版,并报告一个错误消息.

FreeMarker会忽略FTL标签中多余的空格.所以,下面这么写也是可以的:
<#list[BR]
animals as[BR]
being[BR]
>[BR]
${being.name} for ${being.price} Euros[BR]
</#list >
但是,无论如何,你不可以在<或者</和指令名之间加入空白,这是不允许的.

关于所有指令的列表可以看指令参考.(但是我建议你先看完本章关于表达式的介绍).

注意
FreeMarker也可以配置成在使用FTL标签和注释时使用[和]而不是<和>,像[#if user == "Big Joe"]...[/#if].更多细节见:其他/另一种语法.

注意
FreeMarker也可以配置为在使用预设指令时不使用#,像<if user == "Big Joe">...</if>.但是,我们不建议你使用这种模式.更多信息见:参考/弃用的FTL系统/老的FTL语法

没有评论: