On this page
旧的 FTL 语法
使用旧的 FTL 语法,FTL 标记中不需要#
(甚至不允许 2.1 以前的版本)。例如,您可以这样编写:
<html>
<head>
<title>Welcome!</title>
</head>
<body>
<h1>Welcome ${user}!</h1>
<p>We have there animals:
<ul>
<list animals as animal>
<li>${animal.name} for ${animal.price} Euros
</list>
</ul>
<include "common_footer.html">
</body>
</html>
对于 HTML 作者来说,#
-less 语法更自然,但它有太多缺点,因此最终我们决定弃用它。使用较新的语法(也称为“严格语法”),严格要求#
。也就是说,由于<include "common_footer.html">
之类的东西不视为 FTL 标签,因此它们将按原样转到输出。请注意,用户定义的指令使用@
而不是* #
。
但是,为了给用户腾出时间为更改做准备,在 FreeMarker 2.1 和 2.2 中,使用#
是可选的,除非程序员通过在Configuration
上调用setStrictSyntaxMode(true)
在 FreeMarker 配置中启用严格语法模式。实际上,我们强烈建议程序员这样做。从更高版本开始,此设置最初将设置为true
。另外,您可以使用ftl directive指定是要在模板文件中使用严格语法还是旧语法。
与传统的 FTL 语法相比,“严格语法”的优点是:
由于所有
<#...>
和</#...>
都保留用于 FTL:我们可以引入新的指令而不会破坏向后兼容性。
我们可以检测到您是否 Importing 过错,即
<#inculde ...>
被视为解析时错误,而不是无声地视为简单文本。第三方工具更容易处理模板(例如,突出显示语法),尤其是因为它们不必了解新版本引入的新指令。
模板更具可读性,因为更容易发现嵌入到 HTML 或其他标记中的
<#...>
标签。
<#
和</#
是非法的 XML(CDATA 部分中除外),并且在几乎所有其他 SGML 应用程序中都是非法的,因此它们不会干扰静态文本部分中使用的标记(例如,如果生成的 XML 中有include
元素)。