FreeMarker-1

1、 模板+ 數據模型= 輸出

2、 MVC模式:Model-View-Controller的縮寫,中文翻譯爲"模型-視圖-控制器"。

3、 哈希表通過可查找的名稱來訪問存儲的其他空間

4、 用數組的方括號方式來訪問一個序列的子變量:animals[0].name;whatnot.fruits[1],索引通常從零開始。

5、 標量存儲單一的值,這種類型的值可以是字符串,數字,日期/時間或者是布爾值。

6、 ${…}:FreeMarker將會輸出真實的值來替換花括號內的表達式。

FTL tags標籤(FreeMarker 模板的語言標籤):這些標籤的使用一般以符號#開頭。(用戶自定義的FTL標籤使用@符號來代替#)。

Comments註釋:FreeMarker的註釋和HTML的註釋相似,但是它用<#--和-->來分隔。

directives指令就是所指的FTL標籤。這指令在HTML的標籤(如<table>和</table>)元素(如table元素)中的關係是相同的

7、 使用if指令可以有條件地跳過模板的一部分,

 

我們尊敬的領導是if條件中那唯一的user變量值,當它和“Big Joe”相同時才顯示出來。當condition的判斷結果爲false(布爾值)時,在<#ifcondition>和</#if>標籤之間的內容將會被略過。

8、 使用<#else>標籤可以指定當條件爲假時程序可以執行的內容。  

9、 list指令的一般格式爲:<#list sequence asloopVariable>repeatThis</#list>

            sequence:序列;repeatThis:在給定的sequence遍歷時的每項中重複,從第一項開始,一個接着一個。

10、include指令:插入其他文件的內容到當前的模板中。 

   Include裏面包含的是一個網址,顯示的是網址裏面的全部內容!

11、處理不存在變量

 

通過放置??在變量名後面來詢問FreeMarker一個變量是否存在。將它和if指令合併,那麼如果user變量不存在的話將會忽略整個問候代碼段

12、數值

不需要存儲的數值也可以稱之爲數值,例如:100 

當模板被執行時,計算的臨時結果也稱爲數值,比如20,120(它會打印120)

 

14、支持的類型有:標量:字符串;數字;布爾值;日期

容器: 哈希表;序列;集

子程序:方法和函數;用戶自定義指令

其它/很少使用:節點

15、方法和函數:

數據模型中放置了一個方法變量avg,求平均值:

16、用戶自定義指令:

      假設現在有一個變量,box,它的值是用戶自定義的指令,用來打印一些特定的HTML信息,這個指令定義了一個標題和其中的信息。    

17、如果能夠實現,請用自定義指令而不用函數/方法

①、輸出(返回值)的是標記(HTML,XML等)。主要原因是函數的返回結果可以自動進行XML轉義(這是因爲${…}的特性),而用戶自定義指令的輸出則不是(這是因爲<@...>的特性所致,它的輸出假定爲是標記,因此就不再轉義)。

②、副作用是重要的,而不是返回值。例如一個指令的目的是往服務器日誌中添加一個條目。(事實上你不能得到自定義指令的返回值,但有些反饋的類型是有可能設置非本地變量的)

③、會進行流程的控制(就像listif指令那樣),但是不能在函數/方法上這麼做。

18、節點

   節點的主要作用是拓撲信息,還可以存儲節點名稱,類型(字符串),命名空間(字符串)。

19、模板的總體結構(FTL是區分大小寫的)

    ①、Text文本:文本會照着原樣來輸出。

②、Interpolation插值:這部分的輸出會被計算的值來替換。插值由${}所分隔

③、FTLtags標籤:與HTML標籤很相似,但它們卻是給FreeMarker的指示且不會打印在輸出內容中。

④、Comments註釋:註釋和HTML的註釋很相似,但是由<#---->來隔的。

  注:FTL是區分大小寫的,插值僅僅可以在文本中間使用(也可以在字符串表達式中)。FTL標籤不可以在其他FTL標籤和插值中使用。註釋可以放在FTL標籤和插值中間。

20、指令的調用:

     如調用list指令:在語法上使用了兩個標籤:<#list animals asbeing>和</#list>。

對於用戶自定義的指令使用@來代替#。例如:<@mydirectiveparameters>...</@mydirective>

21、備忘單

㈠、直接指定值

①字符串:"Foo" 或者 'Foo' 或者 "It's \"quoted\"" 或者 r"C:\raw\string"

②數字:123.45

③布爾值:true, false

④序列:["foo", "bar",123.45], 1..100

⑤哈希表:{"name":"green mouse","price":150}

㈡、檢索變量

①頂層變量:user

②從哈希表中檢索數據:user.name, user[“name”]

③從序列中檢索:products[5]

④特殊變量:.main

㈢、字符串操作

①插值(或連接):"Hello ${user}!"(或"Free" + "Marker"

②獲取一個字符:name[0]

㈣、序列操作

①連接:users + ["guest"]

②序列切分:products[10..19] products[5..]

③哈希表操作

④連接:passwords +{"joe":"secret42"}

㈤、算數計算: (x * 1.5 + 10) / 2 - y % 100

㈥、比較:x == y, x != y, x < y, x > y, x >= y, x <= y, x &lt; y, 等等

㈦、邏輯操作:!registered&& (firstVisit ||fromEurope)

㈧、內建函數:name?upper_case

㈨、方法調用:repeat("What", 3)

㈩、處理不存在的值

①默認值:name!"unknown" 或者(user.name)!"unknown"或者name! 或者 (user.name)!

②檢測不存在的值:name?? 或者(user.name)??  

22、字符串

    如果文本本身包含用於字符引用的引號(雙引號”或單引號’)或反斜槓時,應該在它們的前面再加一個反斜槓,這就是轉義。   

23、FreeMarker所支持的所有的轉義符序列  

一種特殊的字符串就是原生字符串。在原生字符串中,反斜槓和${沒有特殊的含義,它們被視爲普通的字符。爲了表明字符串是原生字符串,在開始的引號或單引號之前放置字母r。

24、序列

   指定一個文字的序列,使用逗號來遍歷子變量,然後把整個列表放到方括號內。

 輸出:

25、哈希表

   在模板中指定一個哈希表,就可以遍歷用逗號來分隔的“鍵/值”對,把列表放到花括號內。

   例如:{"name":"green mouse","price":150}。

發佈了42 篇原創文章 · 獲贊 12 · 訪問量 38萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章