freemarker總結

Freemarker 使用總結

FreeMarker模板文件主要由以下4個部分組成:html

       文本:直接輸出部分函數

       註釋:<!-- …-->格式部分,不輸出編碼

       插值:即${}或者#{}部分,使用數據模型中的部分替代輸出.spa

       FTL指令:freemarker指定,和html標記相似,名字前加#予以區分,不會輸出.orm

一.  Freemarker指令規則htm

前面的#能夠變爲@, ,若是該指令是一個用戶指令而不是系統內建指令時,應將#符號改爲@符號. FreeMarker會忽略FTL標籤中的空白字符,值得注意的是< , /> 和指令之間不容許有空白字符.對象

a)      開始標籤<#directivename parameter>索引

b)     結束標籤</#directivename>字符串

c)      空標籤:<#directivename parameter/>string

二.  Freemarker插值規則

a)      通用插值${expr};

                 i.          插值結果爲字符串值:直接輸出表達式結果

                ii.          插值結果爲數字值:根據默認格式(由#setting指令設置)將表達式結果轉換成文本輸出.可使用內建的字符串函數格式化單個插值

               iii.          插值結果爲日期值:根據默認格式(由#setting指令設置)將表達式結果轉換成文本輸出.可使用內建的字符串函數格式化單個插值

              iv.          插值結果爲布爾值:根據默認格式(由#setting指令設置)將表達式結果轉換成文本輸出.可使用內建的字符串函數格式化單個插值.

               v.          字符串格式化例子: ${lastUpdated?string("yyyy-MM-dd HH:mm:ss zzzz")}

b)     數字格式化插值:#{expr}或#{expr;format}

                 i.          數字格式化插值可採用#{expr;format}形式來格式化數字,其中format能夠是:
mX:小數部分最小X位
MX:小數部分最大X位

                ii.          數字格式化例子:#{x; m1M2} <#-- 輸出2.58 -->

三.  表達式

表達式是FreeMarker模板的核心功能,表達式放置在插值語法${}之中時,代表須要輸出表達式的值;表達式語法也可與FreeMarker標籤結合,用於控制輸出.實際上FreeMarker的表達式功能很是強大,它不只支持直接指定值,輸出變量值,也支持字符串格式化輸出和集合訪問等功能.

a)      直接指定值, 使用直接指定值語法讓FreeMarker直接輸出插值中的值,而不是輸出變量值.直接指定值能夠是字符串,數值,布爾值,集合和MAP對象.

                 i.          字符串:直接指定字符串值使用單引號或雙引號限定,若是字符串值中包含特殊字符須要轉義.

                ii.          數值: 表達式中的數值直接輸出,不須要引號.小數點使用"."分隔,不能使用分組","符號.FreeMarker目前還不支持科學計數法

               iii.          布爾值: 直接使用true和false,不使用引號.

              iv.          集合: 集合以方括號包括,各集合元素之間以英文逗號","分隔.

<#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as x>
${x}
</#list>

1.      集合: 可使用數字範圍定義數字集合,如2..5等同於[2, 3, 4, 5]

               v.          Map對象: Map對象使用花括號包括,Map中的key-value對之間以英文冒號":"分隔,多組key-value對之間以英文逗號","分隔

b)     輸出變量值: FreeMarker的表達式輸出變量時,這些變量能夠是頂層變量,也能夠是Map對象中的變量,還能夠是集合中的變量,並可使用點(.)語法來訪問Java對象的屬性

                 i.          頂層變量: 直接放在數據模型中的值直接使用${variableName}來輸出變量值

                ii.          輸出集合元素: 若是須要輸出集合元素,則能夠根據集合元素的索引來輸出集合元素,集合元素的索引以方括號指定.FreeMarker還支持返回集合的子集合,若是須要返回集合的子集合

               iii.          輸出Map元素: Map對象能夠是直接HashMap的實例,甚至包括JavaBean實例,對於JavaBean實例而言,咱們同樣能夠把其當成屬性爲key,屬性值爲value的Map實例.爲了輸出Map元素的值,可使用點語法或方括號語法

c)      字符串操做: 操做很是靈活,能夠將字符串常量和變量鏈接起來,也能夠返回字符串的子串

                 i.          使用${..}或#{..}在字符串常量部分插入表達式的值,從而完成字符串鏈接.

                ii.          直接使用鏈接運算符+來鏈接字符串

d)      集合鏈接運算符: 集合運算符是將兩個集合鏈接成一個新的集合,鏈接集合的運算符是+      

                 i.          <#list ["星期一","星期二","星期三"] + ["星期四","星期五","星期六","星期天"] as x>
${x}
</#list>

e)     Map對象的鏈接運算符也是將兩個Map對象鏈接成一個新的Map對象,Map對象的鏈接運算符是+

f)      算術運算符:FreeMarker表達式中徹底支持算術運算,FreeMarker支持的算術運算符包括:+, - , * , / , %

                 i.          運算符兩邊的運算數字必須是數字

                ii.          使用+運算符時,若是一邊是數字,一邊是字符串,就會自動將數字轉換爲字符串再鏈接

               iii.          使用內建的int函數可對數值取整

g)     比較運算符:

                 i.          =或者==:判斷兩個值是否相等.

                ii.          !=:判斷兩個值是否不等. =和!=兩邊必須是相同類型的值

               iii.          >或者gt:判斷左邊值是否大於右邊值

              iv.          >=或者gte:判斷左邊值是否大於等於右邊值

               v.          <或者lt:判斷左邊值是否小於右邊值

              vi.          <=或者lte:判斷左邊值是否小於等於右邊值

h)     邏輯運算符

                 i.          邏輯與:&&

                ii.          邏輯或:||

               iii.          邏輯非:!

              iv.          邏輯運算符只能做用於布爾值,不然將產生錯誤

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

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

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

               iii.          lower_case:將字符串轉換成小寫

              iv.          upper_case:將字符串轉換成大寫

               v.          trim:去掉字符串先後的空白字符

j)       空值處理運算符FreeMarker對空值的處理很是嚴格,FreeMarker的變量必須有值,沒有被賦值的變量就會拋出異常,由於FreeMarker未賦值的變量強制出錯能夠杜絕不少潛在的錯誤,如缺失潛在的變量命名,或者其餘變量錯誤.這裏所說的空值,實際上也包括那些並不存在的變量,對於一個Java的null值而言,咱們認爲這個變量是存在的,只是它的值爲null,但對於FreeMarker模板而言,它沒法理解null值,null值和不存在的變量徹底相同.

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

                ii.          ??:判斷某個變量是否存在

四.  FreeMarker的經常使用指令

FreeMarker的FTL指令也是模板的重要組成部分,這些指令可實現對數據模型所包含數據的撫今迭代,分支控制.除此以外,還有一些重要的功能,也是經過FTL指令來實現的.

a)      if指令

b)     switch , case , default , break指令

c)      list, break指令

d)     include指令

e)      import指令

f)      noparse指令noparse指令指定FreeMarker不處理該指定裏包含的內容,

g)     escape , noescape指令escape指令致使body區的插值都會被自動加上escape表達式,但不會影響字符串內的插值,只會影響到body內出現的插值

h)     assign指令用於爲該模板頁面建立或替換一個頂層變量

i)        setting指令該指令用於設置FreeMarker的運行環境

j)        macro , nested , return指令macro能夠用於實現自定義指令,經過使用自定義指令,能夠將一段模板片斷定義成一個用戶指令.

相關文章
相關標籤/搜索