在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
元素)的标签。