FreeMaker 基礎教程

來源:互聯網
上載者:User
copy自 http://demojava.iteye.com/blog/800204  

以下內容全部是網上收集: 

FreeMarker的模板檔案並不比HTML頁面複雜多少,FreeMarker模板檔案主要由如下4個部分組成: 
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> 

1, FTL指令規則 

在FreeMarker中,使用FTL標籤來使用指令,FreeMarker有3種FTL標籤,這和HTML標籤是完全類似的. 
1,開始標籤:<#directivename parameter> 
2,結束標籤:</#directivename> 
3,空標籤:<#directivename parameter/> 

實際上,使用標籤時前面的符號#也可能變成@,如果該指令是一個使用者指令而不是系統內建指令時,應將#符號改成@符號. 
使用FTL標籤時, 應該有正確的嵌套,而不是交叉使用,這和XML標籤的用法完全一樣.如果全用不存在的指令,FreeMarker不會使用模板輸出,而是產生一個錯誤訊息.FreeMarker會忽略FTL標籤中的空白字元.值得注意的是< , /> 和指令之間不允許有空白字元. 

2, 插值規則 

FreeMarker的插值有如下兩種類型:1,通用插值${expr};2,數字格式化插值:#{expr}或#{expr;format} 

2.1 通用插值 

對於通用插值,又可以分為以下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")} 
輸出結果是: 
yes 

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} 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.