旧的 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元素)。