註釋:包含在<#--和-->
<#local y = "test"> 定義局部變量
<#import "/lib/my_test.ftl" as my> 導入模板文件 指定名字空間 my
<#macro greet> 用戶定義指令
<font size="+2">Hello Joe!</font>
</#macro>
Ø 作爲用戶定義指令使用宏變量時,使用@替代FTL標記中的#
<@greet></@greet>
Ø 如果沒有體內容,也可以使用:
<@greet/>
<#macro greet person>
<font size="+2">Hello ${person}!</font>
</#macro>
Ø 可以這樣使用這個宏變量:
<@greet person="Fred"/> and <@greet person="Batman"/>
輸出結果是:
<font size="+2">Hello Fred!</font>
and <font size="+2">Hello Batman!</font>
用戶定義指令可以有嵌套內容,使用<#nested>指令執行指令開始和結束標記之間的模板片斷
Ø 例子:
<#macro border>
<table border=4 cellspacing=0 cellpadding=4><tr><td>
<#nested>
</tr></td></table>
</#macro>
if指令
<#if animals.python.price < animals.elephant.price>
Pythons are cheaper than elephants today.
<#else>
Pythons are not cheaper than elephants today.
</#if>
list指令
<#list animals as being>
<tr><td>${being.name}<td>${being.price} Euros
</#list>
<#list ["winter", "spring", "summer", "autumn"] as x>
${x}
</#list>
<#list ["Joe", "Fred"] + ["Julia", "Kate"] as user>
- ${user}
</#list>
輸出結果是:
- Joe
- Fred
- Julia
- Kate
include指令
<#include "/copyright_footer.html">
有一類特殊的字符串稱爲raw字符串,被認爲是純文本,其中的\和{等不具有特殊含義,該類字符串在引號前面加r,下面是一個例子:
${r"${foo}"}
${r"C:\foo\bar"}
輸出的結果是:
${foo}
C:\foo\bar
<#assign ages = {"Joe":23, "Fred":25} + {"Joe":30, "Julia":18}>
- Joe is ${ages.Joe}
- Fred is ${ages.Fred}
- Julia is ${ages.Julia}
輸出結果是:
- Joe is 30
- Fred is 25
- Julia is 18
由於Freemarker會將>解釋成FTL標記的結束字符,所以對於>和>=可以使用括號來避免這種情況,例如
<#if (x > y)>
內建函數
Ø 內建函數的用法類似訪問散列的子變量,只是使用“?”替代“.”,下面列出常用的一些函數
Ø 字符串使用的:
n html:對字符串進行HTML編碼
n cap_first:使字符串第一個字母大寫
n lower_case:將字符串轉換成小寫
n upper_case:將字符串轉換成大寫
n trim:去掉字符串前後的空白字符
Ø 序列使用的:
n size:獲得序列中元素的數目
Ø 數字使用的:
n int:取得數字的整數部分(如-1.9?int的結果是-1)
Ø 例子(假設test保存字符串"Tom & Jerry"):
${test?html}
${test?upper_case?html}
輸出結果是:
Tom & Jerry
TOM & JERRY
string格式化單個Interpolation,下面是一個例子:
<#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%
Ø 插入日期值:根據缺省格式(由#setting指令設置)將表達式結果轉換成文本輸出;可以使用內建函數string格式化單個Interpolation,下面是一個使用格式模式的例子:
${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指令設置)將表達式結果轉換成文本輸出;可以使用內建函數string格式化單個Interpolation,下面是一個例子:
<#assign foo=true/>
${foo?string("yes", "no")}
輸出結果是:
yes
數字Interpolation的#{expr; format}形式可以用來格式化數字,format可以是:
Ø mX:小數部分最小X位
Ø MX:小數部分最大X位
Ø 例子:
<#-- If the language is US English the output is: -->
<#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 -->
使用import指令導入庫到模板中,Freemarker會爲導入的庫創建新的名字空間,並可以通過import指令中指定的散列變量訪問庫中的變量:
<#import "/lib/my_test.ftl" as my>
<#assign mail="[email protected]">
<@my.copyright date="1999-2002"/>
${my.mail}
${mail}
輸出結果:
<p>Copyright (C) 1999-2002 Julia Smith. All rights reserved.
<br>Email: [email protected]</p>