Skip to end of metadata
Go to start of metadata

这里假设你已经阅读完入门章节,数值和类型章节两部分了。

本页面中的内容:

总体结构

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

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

类型说明
Text 文本文本会照着原样来输出。
Interpolation 插值这部分的输出会被计算的值来替换。插值由${和}所分隔(或者 # {和},这种风格已经不建议再使用了)。
FTL tags 标签FTL 标签和 HTML 标签很相似,但是它们却是给 FreeMarker 的指示,而且不会打印在输出内容中。
Comments 注释FTL 的注释和 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 being>[BR]
<li>${being.name} for ${being.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... -->
being>[BR]
...

如果目前您已经自己尝试了上面所有的示例的话,那么你也许会注意一些空格、制表符和换行符从模板输出中都不见了,尽管我们之前已经说了文本是按照原样输出的。

现在不用为此而计较,这是由于 FreeMarker 的“空格剥离”特性在起作用,它当然会自动去除一些多余的空格,制表符和换行符了。这个特性后续也会解释到。

  • No labels