freemarker 整理手冊

註釋:包含在<#--和-->

<#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 &amp; Jerry

TOM &amp; 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>

[email protected]

[email protected] 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章