FreeMarker 的經常使用指令介紹

1、數據類型:html

四種基本類型:String、Number、Boolean、Date。直接指定值能夠是字符串、數值、布爾值、集合及Map對象spring

1. 字符串
直接指定字符串值使用單引號或雙引號限定。字符串中可使用轉義字符」\"。若是字符串內有大量的特殊字符,則能夠在引號的前面加上一個字母r,則字符串內的全部字符都將直接輸出。
2. 數值
數值能夠直接輸入,不須要引號。FreeMarker不支持科學計數法。
3. 布爾值
直接使用truefalse,不使用引號。
4. 集合
集合用中括號包括,集合元素之間用逗號分隔。
使用數字範圍也能夠表示一個數字集合,如1..5等同於集合[1, 2, 3, 4, 5];一樣也能夠用5..1來表示[5, 4, 3, 2, 1]
5. Map對象
Map對象使用花括號包括,Map中的key-value對之間用冒號分隔,多組key-value對之間用逗號分隔。
注意:Map對象的keyvalue都是表達式,但key必須是字符串。{"name":"green mouse", "price":150} 函數

6. 時間對象測試

root.put("date1", new Date());編碼

${date1?string("yyyy-MM-dd HH:mm:ss")}spa

2、控制語句.net

 if指令 orm

這是一個典型的分支控制指令,該指令的做用徹底相似於Java語言中的if,if指令的語法格式以下: 
<#if condition>... 
    <#elseif condition>... 
    <#elseif condition>... 
  <#else> ... 
</#if> 

例子以下: 
<#assign age=23> 
<#if (age>60)>老年人 
        <#elseif (age>40)>中年人 
        <#elseif (age>20)>青年人 
    <#else> 少年人 
</#if> 
輸出結果是:青年人 
上面的代碼中的邏輯表達式用括號括起來主要是由於裏面有「>」符號,因爲FreeMarker會將>符號當成標籤的結束字符,可能致使程序出錯,爲了不這種狀況,咱們應該在凡是出現這些符號的地方都使用括號。htm

自定義指令(macro指令)對象

<#macro m1>   <#--定義指令m1 -->

<b>aaabbbccc</b>

<b>dddeeefff</b>

</#macro>

<@m1 /><@m1 />  <#--調用上面的宏指令 -->

輸出:aaabbbccc

         dddeeefff

定義帶參的宏指令:

<#macro m2 a b c >

${a}--${b}--${c}

</#macro>

<@m2 a="老高" b="老張" c="老馬" />

nested指令:

<#macro border> 

  <table border=4 cellspacing=0 cellpadding=4><tr><td> 

    <#nested> 

  </td></tr></table> 

</#macro>

<@border >表格中的內容!</@border>

include指令:

<#include "included.txt" />

3、集合操做

list, break 

語法 
<#list  sequence  as item > 
... 
<#if item = "spring"><#break></#if> 
... 
</#list> 

關鍵字 
item_index: 是list當前值的下標 
item_has_next: 判斷list是否還有值 

用例 
<#assign seq = ["winter", "spring", "summer", "autumn"]> 
<#list seq as x> 
  ${x_index + 1}. ${x}<#if x_has_next>,</#if> 

</#list> 

輸出 
  1. winter, 
  2. spring, 
  3. summer, 
  4. autumn  

4、空值處理

FreeMarker的變量必須賦值,不然就會拋出異常。

而對於FreeMarker來講,null值和不存在的變量是徹底同樣的,由於FreeMarker沒法理解null值。

FreeMarker提供兩個運算符來避免空值:

1. !: 指定缺失變量的默認值;

2. ??:判斷變量是否存在。

!運算符有兩種用法:variable!或variable!defaultValue。第一種用法不給變量指定默認值,代表默認值是空字符串、長度爲0的集合、或長度爲0的Map對象。

使用variable!defaultValue運算符指定默認值並不要求默認值的類型和變量類型相同。

測試空值處理:

<#-- ${sss} 沒有定義這個變量,會報異常! -->

${sss!} <#--沒有定義這個變量,默認值是空字符串! -->

${sss!"abc"} <#--沒有定義這個變量,默認值是字符串abc! -->

5、命名空間_宏指令

當運行 FTL 模板時,就會有使用 assign 和 macro 指令建立的變量的集合(多是空的),能夠從前一章節來看如何使用它們。像這樣的變量集合被稱爲 namespace 命名空間。在簡單的狀況下能夠只使用一個命名空間,稱之爲 main namespace 主命名空間。由於一般只使用本頁上的命名空間,因此就沒有意識到這點。 

    若是想建立能夠重複使用的宏,函數和其餘變量的集合,一般用術語來講就是引用

library 庫。使用多個命名空間是必然的。只要考慮你在一些項目中,或者想和他人共享使用的時候,你是否有一個很大的宏的集合。但要確保庫中沒有宏(或其餘變量)名和數據模型中變量同名,並且也不能和模板中引用其餘庫中的變量同名。一般來講,變量由於名稱衝突也會相互衝突。因此要爲每一個庫中的變量使用不一樣的命名空間。

定義b.ftl文件:

<#macro copyright date>

  <p>Copyright (C) ${date} 中國人民.</p> 

</#macro> 

<#assign mail = "zgrm@163.com">

在a.ftl文件中引入b.ftl,從而可使用b.ftl中定義的宏和變量:

測試命名空間:

<#import "b.ftl" as bb  />

<@bb.copyright date="2010-2011" />

${bb.mail}

<#assign mail="my@163.com"  />

${mail}

<#assign mail="my@163.com" in bb  />

${bb.mail}

執行後,控制檯打印:

測試命名空間:

  <p>Copyright (C) 2010-2011 中國人民.</p> 

zgrm@163.com

my@163.com

my@163.com

6、字符串操做

1. 字符串鏈接
字符串鏈接有兩種語法:
1 使用${..}#{..}在字符串常量內插入表達式的值;
(2) 
直接使用鏈接運算符「+」鏈接字符串。
如,下面兩種寫法等效:
              ${"Hello, ${user}"}                                                                                                               
              ${"Hello, " + user + "!"}                                                                                                        
有一點須要注意: ${..}只能用於文本部分做爲插值輸出,而不能用於比較等其餘用途,如:
              <#if ${isBig}>Wow!</#if>                                                                                                               
              <#if "${isBig}">Wow!</#if>                                                                                                             
應該寫成:
              <#if isBig>Wow!</#if>                                                                                                                    

2.
截取子串
截取子串能夠根據字符串的索引來進行,若是指定一個索引值,則取得字符串該索引處的字符;若是指定兩個索引值,則截取兩個索引中間的字符串子串。如:
              <#assign number="01234">
              ${number[0]} <#--
輸出字符0 -->
              ${number[0..3]} <#--
輸出子串「0123」 -->

7、內置函數

FreeMarker提供了一些內建函數來轉換輸出,能夠在任何變量後緊跟?。?後緊跟內建函數,就能夠經過內建函數來轉換輸出變量。

字符串相關經常使用的內建函數:

1. html: 對字符串進行HTML編碼;

2. cap_first: 使字符串第一個字母大寫;

3. lower_case: 將字符串轉成小寫;

4. upper_case: 將字符串轉成大寫;

集合相關經常使用的內建函數:

1. size: 得到集合中元素的個數;

數字值相關經常使用的內建函數:

1. int: 取得數字的整數部分。

舉例:

root.put("htm2", "<b>粗體</b>");

內建函數:

${htm2?html}

輸出:<b>粗體</b>

相關文章
相關標籤/搜索