FreeMarker模板文件並不比HTML頁面複雜多少,FreeMarker模板文件主要由以下4個部分組成:html
1. 文本:直接輸出的部分
2. 註釋:<#-- ... -->格式部分,不會輸出
3. 插值:即${...}或#{...}格式的部分,將使用數據模型中的部分替代輸出
4. FTL指令:FreeMarker指定,和HTML標記相似,名字前加#予以區分,不會輸出函數
下面是一個FreeMarker模板的例子,包含了以上所說的4個部分
<html><br>
<head><br>
<title>Welcome!</title><br>
</head><br>
<body><br>
<#-- 註釋部分 --><br>
<#-- 下面使用插值 -->
<h1>Welcome ${user} !</h1><br>
<p>We have these animals:<br>
<u1><br>
<#-- 使用FTL指令 -->
<#list animals as being><br>
<li>${being.name} for ${being.price} Euros<br>
<#list><br>
<u1><br>
</body><br>
</html>spa
1. FTL指令規則code
在FreeMarker中,使用FTL標籤來使用指令,FreeMarker有3種FTL標籤,這和HTML標籤是徹底相似的.
1,開始標籤:<#directivename parameter>
2,結束標籤:</#directivename>
3,空標籤:<#directivename parameter/>orm
實際上,使用標籤時前面的符號#也可能變成@,若是該指令是一個用戶指令而不是系統內建指令時,應將#符號改爲@符號.
使用FTL標籤時,應該有正確的嵌套,而不是交叉使用,這和XML標籤的用法徹底同樣.若是全用不存在的指令,FreeMarker不會使用模板輸出,而是產生一個錯誤消息.FreeMarker會忽略FTL標籤中的空白字符.值得注意的是< , /> 和指令之間不容許有空白字符.htm
2.插值規則對象
FreeMarker的插值有以下兩種類型:1,通用插值${expr};2,數字格式化插值:#{expr}或#{expr;format}blog
2.1 通用插值ci
對於通用插值,又能夠分爲如下4種狀況:
1,插值結果爲字符串值:直接輸出表達式結果
2,插值結果爲數字值:根據默認格式(由#setting指令設置)將表達式結果轉換成文本輸出.可使用內建的字符串函數格式化單個插值,以下面的例子:
<#settion number_format="currency"/>
<#assign answer=42/>
${answer}
${answer?string} <#-- the same as ${answer} -->
${answer?string.number}
${answer?string.currency}
${answer?string.percent}
${answer}
輸出結果是:
$42.00
$42.00
42
$42.00
4,200%
3,插值結果爲日期值:根據默認格式(由#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')'")}
輸出結果是:
2008-04-08 08:08:08 Pacific Daylight Time
Tue, Apr 8, '03
Tuesday, April 08, 2003, 08:08:08 PM (PDT)
4,插值結果爲布爾值:根據默認格式(由#setting指令設置)將表達式結果轉換成文本輸出.可使用內建的字符串函數格式化單個插值,以下面的例子:
<#assign foo=true/>
${foo?string("yes", "no")}
輸出結果是:
yesunicode
2.2 數字格式化插值
數字格式化插值可採用#{expr;format}形式來格式化數字,其中format能夠是:
mX:小數部分最小X位
MX:小數部分最大X位
以下面的例子:
<#assign x=2.582/>
<#assign y=4/>
#{x; M2} <#-- 輸出2.58 -->
#{y; M2} <#-- 輸出4 -->
#{x; m2} <#-- 輸出2.6 -->
#{y; m2} <#-- 輸出4.0 -->
#{x; m1M2} <#-- 輸出2.58 -->
#{x; m1M2} <#-- 輸出4.0 -->
3, 表達式
表達式是FreeMarker模板的核心功能,表達式放置在插值語法${}之中時,代表須要輸出表達式的值;表達式語法也可與FreeMarker標籤結合,用於控制輸出.實際上FreeMarker的表達式功能很是強大,它不只支持直接指定值,輸出變量值,也支持字符串格式化輸出和集合訪問等功能.
3.1 直接指定值
使用直接指定值語法讓FreeMarker直接輸出插值中的值,而不是輸出變量值.直接指定值能夠是字符串,數值,布爾值,集合和MAP對象.
1,字符串
直接指定字符串值使用單引號或雙引號限定,若是字符串值中包含特殊字符須要轉義,看下面的例子:
${"個人文件保存在C:\\盤"}
${'我名字是\"annlee\"'}
輸出結果是:
個人文件保存在C:\盤
我名字是"annlee"
FreeMarker支持以下轉義字符:
\";雙引號(u0022)
\';單引號(u0027)
\\;反斜槓(u005C)
\n;換行(u000A)
\r;回車(u000D)
\t;Tab(u0009)
\b;退格鍵(u0008)
\f;Form feed(u000C)
\l;<
\g;>
\a;&
\{;{
\xCode;直接經過4位的16進制數來指定Unicode碼,輸出該unicode碼對應的字符.
若是某段文本中包含大量的特殊符號,FreeMarker提供了另外一種特殊格式:能夠在指定字符串內容的引號前增長r標記,在r標記後的文件將會直接輸出.看以下代碼:
${r"${foo}"}
${r"C:\foo\bar"}
輸出結果是:
${foo}
C:\foo\bar
2,數值
表達式中的數值直接輸出,不須要引號.小數點使用"."分隔,不能使用分組","符號.FreeMarker目前還不支持科學計數法,因此"1E3"是錯誤的.在FreeMarker表達式中使用數值須要注意如下幾點:
1,數值不能省略小數點前面的0,因此".5"是錯誤的寫法
2,數值8 , +8 , 8.00都是相同的
3,布爾值
直接使用true和false,不使用引號.
4,集合
集合以方括號包括,各集合元素之間以英文逗號","分隔,看以下的例子:
<#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as x>
${x}
</#list>
輸出結果是:
星期一
星期二
星期三
星期四
星期五
星期六
星期天
除此以外,集合元素也能夠是表達式,例子以下:
[2 + 2, [1, 2, 3, 4], "whatnot"]
還可使用數字範圍定義數字集合,如2..5等同於[2, 3, 4, 5],可是更有效率.注意,使用數字範圍來定義集合時無需使用方括號,數字範圍也支持反遞增的數字範圍,如5..2
5,Map對象
Map對象使用花括號包括,Map中的key-value對之間以英文冒號":"分隔,多組key-value對之間以英文逗號","分隔.下面是一個例子:
{"語文":78, "數學":80}
Map對象的key和value都是表達式,可是key必須是字符串
本文轉載自OECP社區http://www.oecp.cn/hi/hailang/blog/385