FreeMarker模版文件主要由如下几个部分组成:
1.文本:直接输出的部分。
2.注释:即<#-- ... -->格式部分,不会输出。
3.插值(Interpolation:即${...},或#{...}格式的部分,将使用数据模型中的部分替代输出。
4.FTL指令:FreeMarker指令,和HTML标记类似,名字前加#予以区分,不会输出。
一. 模版结构
上面四个部分,文本部分和注释部分都比较简单,此处不再赘述,这里主要介绍插值(Interpolation)和FTL指令。
下面就是FreeMarker模版的例子:
<html><br>
<head><br>
<title>Welcome!</title><br>
</head><br>
<body><br>
<#-- 注释部分 --><br>
<#-- 下面使用插值 -->
<h1>Welcome ${user}!</h1><br>
<p>We have these animals:<br>
<ul><br>
<#-- 使用FTL指令 -->
<#list animals as being><br>
<li>${being.name} for ${being.price} Euros<br>
</#list><br>
</ul><br>
</body><br>
</html>
上面的FTL模版是一个典型的HTML模版,该模版中包含了注释、FTL指令、插值和基本文本四个组成部分。
二. FTL指令规则
在FreeMarker中,使用FTL标签来使用指令,FreeMarker有三种FTL标记,这和HTML标签是完全类似的:
1.开始标签:<#directivename parameters>
2.结束标签:</#directivename>
3.空标签:<#directivename parameters/>
实际上,使用标签时前面的#符号也可能变成@,如果该指令是一个用户指令而不是系统内建指令时,应将#符号改为@符号。
使用FTL标签时,应该有正确的嵌套,而不是交叉使用,这与XML标签的用法完全一样。因此,下面的代码是错误:
<ul>
<#list animals as being>
<li>${being.name} for ${being.price} Euros
<#if use = "Big Joe">
(except for you)
</#list>
</#if>
<#-- 上面的list指令和if指令没有形成正确嵌套 -->
</ul>
如果使用不存在的指令,FreeMarker不会使用模板输出,而是产生一个错误消息。
FreeMarker会忽略FTL标记中的空白字符,如下面的例子:
<#list[BR]
animals as[BR]
being[BR]
>[BR]
${being.name} for ${being.price} Euros[BR]
</#list >
值得注意的是:<、</和指令之间不允许有空白字符。
三. 插值规则
FreeMarker的插值有如下两种类型:
1.通用插值:${expr}
2.数字格式化插值:#{expr}或#{expr; format}
通用插值
对用通用插值,又可分为如下三种情况:
1.插值结果为字符串值:直接输出表达式结果
2.插值结果为数字值:根据缺省格式(由#setting指令设置)将表达式结果转换成文本输出;可以使用内建的字符串函数格式化单个插值,看下面的模版页面。
<#setting number_format="currency"/>
<#assign answer=42/>
${answer}
${answer?string} <#-- the same as ${answer} -->
${answer?string.number}
${answer?string.currency}
${answer?string.percent}
输出结果是:
$42.00
$42.00
42
$42.00
4,200%
q 插值结果为日期值:根据缺省格式(由#setting指令设置)将表达式结果转换成文本输出;可以使用内建的字符串函数格式化单个插值,下面是一个使用格式模式的例子:
${lastUpdated?string("yyyy-MM-dd HH:mm:ss zzzz")}
${lastUpdated?string("EEE, MMM d, ''yy")}
${lastUpdated?string("EEEE, MMMM dd, yyyy, hh:mm:ss a '('zzz')'")}
输出的结果如下:
2003-04-08 21:24:44 Pacific Daylight Time
Tue, Apr 8, '03
Tuesday, April 08, 2003, 09:24:44 PM (PDT)
插值结果为布尔值:根据缺省格式(由#setting指令设置)将表达式结果转换成文本输出;可以使用内建的字符串函数格式化单个插值,下面是一个例子:
<#assign foo=true/>
${foo?string("yes", "no")}
输出结果是:
yes
数字格式化插值
数字格式化插值可采用如下#{expr; format}形式可以用来格式化数字,其中format可以是:
mX:小数部分最小X位
MX:小数部分最大X位
看下面的FreeMarker模版:
<#assign x=2.582/>
<#assign y=4/>
#{x; M2} <#-- 输出2.58 -->
#{y; M2} <#--输出4 -->
#{x; m1} <#-- 输出2.6 -->
#{y; m1} <#-- 输出4.0 -->
#{x; m1M2} <#-- 输出2.58 -->
#{y; m1M2} <#-- 输出4.0 -->
--
----------------------------------
你的支持 我的坚持
Lead to The IT Future
----------------------------------
没有评论:
发表评论