什么是指令?

使用 FTL 标签来调用指令。 在前面章节的示例中已经调用了 list 指令 和 if 指令。在语法上我们使用了两个标签:<#list animals as animal> 和 </#list>。

FTL 标签分为两种:

  • 开始标签: <#directivename parameters>

  • 结束标签: </#directivename>

除了标签以 # 开头外,其他都和HTML,XML的语法很相似。如果开始标签和结束标签之间没有内容,那么可以只使用开始标签。 例如:<#if something>...</#if>, 而 FreeMarker 知道 <#include something> 中的 include 指令没有可嵌套的内容。

事实上,指令有两种类型: 预定义指令 和 用户自定义指令。 对于用户自定义的指令使用 @ 来代替 #,比如,<@mydirective parameters>...</@mydirective>。 更深的区别在于如果指令没有嵌套内容,那么必须这么使用 <@mydirective parameters />,这和 XML 语法很相似(例如 <img src="..." />)。

像 HTML 标签一样,FTL 标签也必须正确地嵌套使用。下面这段示例代码就是错的, 因为 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 仅仅关心 FTL 标签的嵌套而不关心 HTML 标签的嵌套。它只会把 HTML 看做是文本,不会来解释HTML。

如果你尝试使用一个不存在的指令(比如,输错了指令的名称), FreeMarker 就会拒绝执行模板,同时抛出错误信息。

FreeMarker 会忽略 FTL 标签中多余的空白标记,所以也可以这么来写代码:

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

当然,也不能在 <,</ 和指令名中间入空白标记。

注意:

  • 通过配置,FreeMarker 可以在FTL标签和FTL注释中, 使用 [ 和 ] 来代替 < 和 >,就像 [#if user == "Big Joe"]...[/#if]。

  • 通过配置,FreeMarker 可以不需要 # 来理解预定义指令(比如 <if user == "Big Joe">...</if>),而我们不建议这样来使用。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号