Directives

您可以使用 FTL 标签调用**指令。在示例中,您调用了list指令。从语法上讲,您已经使用两个标签完成了此操作:<#list animals as animal></#list>

有两种 FTL 标签:

  • 起始标签:<#directivename parameters>

  • 结束标签:</#directivename>

除了标记名称以#开头之外,这与 HTML 或 XML 语法相似。如果指令没有嵌套的内容(开始标签和结束标签之间的内容),则必须使用没有结束标签的开始标签。例如,您编写了<#if something>...</#if>,但是只有<#include something>,因为 FreeMarker 知道include指令不能包含嵌套内容。

parameters的格式取决于directivename

实际上,有两种类型的指令:predefined directivesuser-defined directives。对于用户定义的指令,请使用@而不是#,例如<@mydirective parameters>...</@mydirective>。进一步的区别是,如果指令没有嵌套内容,则必须使用<@mydirective parameters />之类的标记,类似于 XML 中的标记(例如<img ... />)。但是用户定义的指令是一个高级主题,将在later中进行讨论。

FTL 标签(如 HTML 标签)必须正确嵌套。因此以下代码是错误的,因为if指令位于list指令嵌套内容的内部和外部:

<ul>
<#list animals as animal>
  <li>${animal.name} for ${animal.price} Euros
  <#if user == "Big Joe">
     (except for you)
</#list> <#-- WRONG! The "if" has to be closed first. -->
</#if>
</ul>

请注意,FreeMarker 并不关心 HTML 标签的嵌套,而只关心 FTL 标签的嵌套。它只是将 HTML 视为纯文本,不会以任何方式对其进行解释。

如果您尝试使用不存在的指令(例如,您 Importing 了错误的指令名称),FreeMarker 将拒绝使用该模板并产生一条错误消息。

FreeMarker 会忽略 FTL 标签内多余的white-space。所以你可以这样写:

<#list[BR]
animalsas[BR]
animal[BR]
>[BR]
${animal.name}for${animal.price}Euros[BR]
</#list>

但是,您不能在<</与指令名称之间插入空格。

可以在模板语言参考/指令参考中找到所有指令的完整列表和说明(但我建议您先阅读有关表达式的章节)。

Note:

可以将 FreeMarker 配置为使用[]而不是 FTL 标签和 FTLComments 中的<>,例如[#if user == "Big Joe"]...[/#if]。有关更多信息,请阅读:杂项/替代(方括号)语法

Note:

可以对 FreeMarker 进行配置,以便它可以理解不带#(如<if user == "Big Joe">...</if>)的 sched 义指令。但是,我们不建议使用此模式。有关更多信息,请阅读:模板语言参考/不建议使用的 FTL 构造/旧的 FTL 语法