3、模板
(1)整体结构
l 模板使用ftl(freemarker模板语言)编写,是下面各部分的一个组合:
Ø 文本:直接输出
Ø interpolation:由${和},或#{和}来限定,计算值替代输出
Ø ftl标记:freemarker指令,和html标记类似,名字前加#予以区分,不会输出
Ø 注释:由<#--和-->限定,不会输出
l 下面是以一个具体模板例子:
<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>
l [br]是用于换行的特殊字符序列
l 注意事项:
Ø ftl区分大小写,所以list是正确的ftl指令,而list不是;${name}和${name}是不同的
Ø interpolation只能在文本中使用
Ø ftl标记不能位于另一个ftl标记内部,例如:
<#if <#include 'foo'>='bar'>...</if>
Ø 注释可以位于ftl标记和interpolation内部,如下面的例子:
<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]
... Ø 多余的空白字符会在模板输出时移除
(2)指令
l 在freemarker中,使用ftl标记引用指令
l 有三种ftl标记,这和html标记是类似的:
Ø 开始标记:<#directivename parameters>
Ø 结束标记:</#directivename>
Ø 空内容指令标记:<#directivename parameters/>
l 有两种类型的指令:预定义指令和用户定义指令
l 用户定义指令要使用@替换#,如<@mydirective>...</@mydirective>(会在后面讲述)
l ftl标记不能够交叉,而应该正确的嵌套,如下面的代码是错误的:
<ul><#list animals as being> <li>${being.name} for ${being.price} euros<#if use = "big joe">
(except for you)</#list></#if> <#-- wrong! -->
</ul> l 如果使用不存在的指令,freemarker不会使用模板输出,而是产生一个错误消息
l freemarker会忽略ftl标记中的空白字符,如下面的例子:
<#list[br] animals as[br] being[br]>[br]
${being.name} for ${being.price} euros[br]</#list > l 但是,<、</和指令之间不允许有空白字符
(3)表达式
l 直接指定值
Ø 字符串
n 使用单引号或双引号限定
n 如果包含特殊字符需要转义,如下面的例子:
${"it's /"quoted/" and
this is a backslash: //"}
${'it/'s "quoted" and
this is a backslash: //'}
输出结果是:
it's "quoted" and
this is a backslash: /
it's "quoted" and
this is a backslash: /
n 下面是支持的转义序列:
转义序列 | 含义 |
/" | 双引号(u0022) |
/' | 单引号(u0027) |
// | 反斜杠(u005c) |
/n | 换行(u000a) |
/r | return (u00
扫描关注微信公众号 |
闽公网安备 35060202000074号