总体结构

实际上用程序语言编写的程序就是模板。 FTL (代表FreeMarker模板语言)。 这是为编写模板设计的非常简单的编程语言。

模板(FTL编程)是由如下部分混合而成的:

  • 文本:文本会照着原样来输出。

  • 插值:这部分的输出会被计算的值来替换。插值由 ${ and } 所分隔(或者 #{ and },这种风格已经不建议再使用了;点击查看更多)。

  • FTL 标签:FTL标签和HTML标签很相似,但是它们却是给FreeMarker的指示, 而且不会打印在输出内容中。

  • 注释:注释和HTML的注释也很相似,但它们是由 <#---->来分隔的。注释会被FreeMarker直接忽略, 更不会在输出内容中显示。

我们来看一个具体的模板。其中的内容已经用颜色来标记了: 文本插值FTL 标签注释。为了看到可见的 换行符, 这里使用了 [BR]

<html>[BR]
<head>[BR]
  <title>Welcome!</title>[BR]
</head>[BR]
<body>[BR]
  <#-- Greet the user with his/her name -->[BR]
  <h1>Welcome ${user}!</h1>[BR]
  <p>We have these animals:[BR]
  <ul>[BR]
  <#list animals as animal>[BR]
    <li>${animal.name} for ${animal.price} Euros[BR]
  </#list>[BR]
  </ul>[BR]
</body>[BR]
</html>

FTL是区分大小写的。 list 是指令的名称而 List 就不是。类似地 ${name}${Name}${NAME} 也是不同的。

请注意非常重要的一点: 插值 仅仅可以在 文本 中使用。 (也可以是字符串表达式;请参考 后续内容)

FTL 标签 不可以在其他 FTL 标签插值中使用。比如, 这样做是 错误 的: <#if <#include 'foo'>='bar'>...</#if>

注释 可以放在 FTL 标签插值中。比如:

<h1>Welcome ${user <#-- The name of user -->}!</h1>[BR]
<p>We have these animals:[BR]
<ul>[BR]
<#list <#-- some comment... --> animals as <#-- again... --> animal>[BR]
...
Note:

如果您已经自行尝试测试上面所有示例的话:那么也许会注意到,一些空格、 制表符和换行符从模板的输出中都不见了,尽管我们之前已经说了 文本 是按照原样输出的。 现在不用为此而计较,这是由于FreeMarker的"空格剥离"特性在起作用, 它当然会自动去除一些多余的空格,制表符和换行符了。 这个特性在 后续内容 中会解释到。