首先說一下FreeMarker中的註釋爲: <#–這裏是註釋的內容 –>
if語句
<#-- 判斷num1等於18就輸出 18一枝花! -->
<#if num1==18>18一枝花!</#if>
<#-- 字符串需要加上雙引號 -->
<#if user=="小明">歡迎你</#if>
<#--布爾值 -->
<#if b2>b2是true!</#if>
if else 語句測試:
<#-- 不是使用> 大部分時候,freemarker會把>解釋成標籤結束(大於可以寫 gt )-->
<#if num0 gt 18>
及格!
<#else>
不及格!
</#if>
時間格式化處理
<#-- 將變量datel 時間格式轉換成 yyyy-MM-dd HH:mm:ss 格式輸出 -->
${date1?string("yyyy-MM-dd HH:mm:ss")}
內建函數:
1. html: 對字符串進行HTML編碼;
2. cap_first: 使字符串第一個字母大寫;
3. lower_case: 將字符串轉成小寫;
4. upper_case: 將字符串轉成大寫;
5. size 獲得集合中元素的個數(集合相關常用的內建函數)
6. int: 取得數字的整數部分(數字值相關常用的內建函數)
內建函數的使用: 變量名?內建函數名,
假設後臺傳入一個htm2的參數,值爲 <b>粗體</b>
root.put("htm2", "<b>粗體</b>");
<#--使用內建函數 html 對字符串(htm2變量)進行HTML編碼-->
${htm2?html}
空值處理:
${sss} <#--這樣寫 如果${sss} 沒有定義這個變量,會報異常! -->
${sss!} <#--這樣寫 沒有定義這個變量,默認值是空字符串! -->
${sss!"abc"} <#--這樣寫 沒有定義這個變量,默認值是字符串abc! -->
遍歷集合
<#-- 遍歷 ls , as ys 表示遍歷ls時中的每個元素取別名爲 ys -->
<#list ls as ys >
<b> ys </b><br/>
</#list>
取普通變量和對象的值:
<#--user 如果是一個普通變量,可以這樣取值-->
${user},
<#--user 如果是一個對象,可以這樣取該對象中name屬性的值-->
${user.uname}
取List集合中的數據
<#-- lst爲一個List集合 根據下標索引取對應得值 -->
${lst[0].city},
${lst[1].city},
${lst[2].city},
include包含
<#--將123.txt包含進來,這可以是包含另一個模板文件或者任何類型的文件-->
<#include "123.txt" />
自定義指令
<#--定義一個指令 爲 dtest -->
<#macro dtest>
<b>aaa</b>
<b>bbb</b>
</#macro>
<#--調用上面定義的 dtest宏指令 -->
<@dtest/><@dtest />
<#--定義一個指令 爲 dtest2 如下 a b c 爲參數 -->
<#macro dtest2 a b c >
${a}==${b}==${c}
</#macro>
<#--調用上面定義的 dtest2宏指令,並傳人蔘數 -->
<@dtest2 a="老高" b="老張" c="老馬" />
<#--定義一個指令 爲 dtest3, <#nested>是獲取調用時標籤中間傳入的內容 -->
<#macro dtest3>
<table border=4 cellspacing=0 cellpadding=4>
<tr>
<td>
<#nested>
</td>
</tr>
</table>
</#macro>
<#--調用上面定義的 dtest3宏指令,標籤中間是傳入的內容 -->
<@dtest3 >這是要傳入的內容!</@dtest3>
測試命名空間及優先級
<#--b.ftl文件內容如下-->
<#macro copyright date>
<p>Copyright (C) ${date} 測試</p>
</#macro>
<#---這裏是定義一個mail變量,值爲[email protected] -->
<#assign mail = "123@163.com">
<#-- 引入一個b.ftl模板 取別名爲bb -->
<#import "b.ftl" as bb />
<#--這裏是調用bb模板中的copyright指令 並傳入date參數 -->
<@bb.copyright date="2010-2011" />
<#--這裏是獲取bb模板中的mail變量值 -->
${bb.mail}
<#--在當前模板中又定義一個跟bb模板中一樣的變量-->
<#assign mail="[email protected]" />
<#--這樣調用的是當前的模板中的mail變量,會輸出[email protected] -->
${mail}
<!-- 重新設置bb模板中 mail變量的值 -->
<#assign mail="[email protected]" in bb />
<#--再次獲取bb模板中的mail變量值,輸入的是修改後的值,爲[email protected] -->
${bb.mail}
比 較 運 算
= (或者==) 判斷兩個值是否相等;
!= 判斷兩個值是否不相等;
注: =和!=可以用作字符串、數值和日期的比較,但兩邊的數據類型必須相同。
而且FreeMarker的比較是精確比較,不會忽略大小寫及空格。
>(或者gt) 大於
>=(或者gte) 大於等於
< (或者lt) 小於
<=(或者lte) 小於等於
注: 上面這些比較運算符可以用於數字和日期,但不能用於字符串。大部分時候,使用gt比>有更好的效果,因爲FreeMarker會把>解釋成標籤的結束字符。可以使用括號來避免這種情況,如:<#if (x>y)>。
邏輯操作:!registered && (firstVisit || fromEurope)
內建函數:name?upper_case
方法調用:repeat("What", 3)
處理不存在的值
name! 或者 (user.name)!
如不存在默認值:name!"unknown" 或者(user.name)!"unknown"
檢測不存在的值:name?? 或者(user.name)??
邏輯運算符
&& 邏輯與
|| 邏輯或
! 邏輯非
邏輯運算符只能用於布爾值。
算術運算符
FreeMarker表達式中支持 + - * / % 運算符
數據類型常見示例
直接指定值
字符串 : "Foo"或 者'Foo'或"It's \"quoted\""或r"C:\raw\string"
數字:123.45
布爾值:true, false
序列:["foo", "bar", 123.45] , 1..100
從序列中檢索:products[5]
哈希表:{"name":"green mouse", "price":150}
檢索變量(如 頂層變量爲 user)
從哈希表中檢索數據:user.name, user[“name”]
特殊變量:.main
字符串操作
插值(或連接):"Hello ${user}!"(或"Free" + "Marker")
獲取一個字符:name[0]
序列操作
連接:users + ["guest"]
序列切分:products[10..19] 或 products[5..]
哈希表操作
連接:passwords + {"joe":"secret42"}
算數運算: (x * 1.5 + 10) / 2 - y % 100
截取子串
截取子串可以根據字符串的索引來進行,
如果指定一個索引值,則取得字符串該索引處的字符;如果指定兩個索引值,
則截取兩個索引中間的字符串子串。如:
<#assign number="01234">
${number[0]} <#-- 輸出字符0 -->
${number[0..3]} <#-- 輸出子串“0123” -->