在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作者来说更加自然,
它有很多的缺点,所以最终我们决定废弃它。使用新式语法(又称为"严格的语法"),
# 是严格要求的。也就是说,像
<include "common_footer.html">
这样的东西将会原样出现在输出中,因为它们不被认为是FTL标签。
注意用户自定义指令使用 @ 代替
#。
然而,为了给用户时间来准备这种改变,在 FreeMarker 2.1 和 2.2 版本中,
# 的用法是可选的,除非程序员调用 Configuration
的 setStrictSyntaxMode(true) 在 FreeMarker 配置中开启严格语法模式。
事实上,我们把这个强烈建议给程序员。从后续释出版本开始,这个设置将会初始设置为
true。而且,如果你在模板文件中想使用严格语法或老式语法,你可以用 ftl 指令来指定。
"严格语法"比遗留的FTL语法的好处是:
-
对于FTL来说,所有
<#...>和</#...>都是保留的:-
我们可以引入新的指令而不破坏向后兼容。
-
我们可以检测你是否创留了一个打字错误,也就是
<#inculde ...>被视为解析时的错误, 而不是被静默地视为简单文本。 -
对于第三方工具来处理模板(比如高亮语法显示)来说是简单的, 特别是因为它们不需要知道新释出版本中被引入的新指令。
-
模板更易于阅读,因为很容易辨认嵌入在HTML或其他标记中的
<#...>标签。
-
-
<#和</#是合法的XML (除了在CDATA段中),而且其他大多数SGML应用中也是合法的, 所以它们不能妨碍用在静态文本部分(比如你在生成的XML中有include元素)的标签。