${...}:Freemaker將會輸出真實的值來替換大括號內的表示式。這樣的表示式被稱為interpolation(插值)。
FTL標籤(Freemaker模板的語言標籤):FTL標籤和HTML標籤有一些相似之處,但他們是Freemaker的指令,不會在輸出中列印的。這些標籤的名字以#開頭。(使用者自定義的FTL標籤可以使用@來代替#)。
註釋:註釋和HTML的註釋相似,他們使用<#-- 和 --> 來標識。不同於HTML註釋,FTL註釋不會出現在輸出中,因為Freemaker會跳過它們。
FTL標籤頁稱為指令。這些指令在HTML的標籤和HTML元素中的關係是相同的。
if指令:判斷語句,可以有條件的跳過模板的一些片段。<#if condition></#if>,condition的使用:==是用來判斷它兩側的值是否相等的操作符,比較的結果是布林值,也就是true和false。!=就是“不等於”,使用<#else>標籤可以指定當條件為false時程式執行的內容。還有<#elseif>完善,
<#if condition >
something
<#elseif condition>
something
<#else>
something
</#if>
二、list指令
當需要列表顯示內容時,list指令是必須的。它的一般格式為:<#list sequence as loopVariable>repeatThis</#list> 。repeatThis部分將會在給定的sequence遍歷時在每一項中重複,從第一項開始,一個接著一個。在所有的重複中,loopVariable將持有當前遍歷項的值。這個變數僅存在於<#list...></#list>標籤內。sequence可以是任意表示式,如果sequence中沒有子項,可以使用items指令,避免空的標籤輸出,另外分隔符<#sep>.
<#list misc.fruits><ul><#items as fruit><li> ${fruit}<#sep>, </li></#items></ul></#list>
或者 <p>Fruits:${fruits?join(",","None")}
三、include指令
使用include指令,可以在模板中插入其它檔案的內容。另外重要的程式碼片段的一個更有利的方式使用巨集,是比引入檔案更為高階的方式。
使用內建函式:內建函式很像子變數或是java中的方法,它們並不是資料模型中的東西,是Freemaker在數值上新增的。為了清晰子變數是哪部分,使用?代替。來訪問
user?html 給出user的HTML轉移版本,比如&會由&來代替。
user?upper_case給出user值的大寫版本
user?cap_first給出user的首字母大寫版本
user?length給出user值中字元數量,空格也會計算在內
user?size給出user序列中專案的個數。
user?index給出在user中基於0開始的user的索引值。
user?counter也像index,但是給出的是基於1的索引值
user?item_parity基於當前計數的奇偶性,給出字串odd或是even,在給不同行著色時比較有用
一些內建函式需要引數來指定行為:
user.protected?string("Y","N")基於user.protected的布林值來返回字串“Y”或“N”
user?item_cycle(‘lightRow’,‘darkRow’)是上面介紹的item_parity更為常用的變體形式。
user?join(“,”)通過連線所有項,將列表轉換為字串,在每個項之間插入引數分隔符
user?starts_with(“J”)根據user值的首字母是否是“J”返回布林值true或false
內建函式應用可以鏈式操作,user?upper_case?html
處理不存在的變數
資料模型中經常會有可選的變數(也就是有時不存在)。Freemaker不允許引用不存在的變數,除非明確的告訴他當變數不存在時如何處理。不論在哪裡引用變數,都可以指定一個預設值來避免變數丟失這種情況,通過在變數名後面跟一個!和預設值。當變數值為空或不存在時,使用預設值。
${user!'Visitor'}
也可以在變數名後面通過跟著??來詢問一個變數是否存在。將它和if指令合併
其他指令:
break指令在迭代的任意點退出。
<#if x== 3><#break></#if>
Alphabetical index指令對指令名可以使用駝峰形式來代替全小寫形式。