天天看點

FreeMarker基本文法

FreeMarker單獨使用的幾率比較小,但是它的文法的确簡單,用起來比較友善,這次整理了點這方面的資料拿出來分享

1.普通的變量

這是最簡單的情況,直接${變量名稱} ,如${name}

需要注意的是有的變量是需要轉義的如雙引号

2.周遊List集合

這個是用的最多的,必須掌握

此外,疊代集合對象時,還包含兩個特殊的循環變量:

item_index:目前變量的索引值

item_has_next:是否存在下一個對象

也可以使用<#break>指令跳出疊代

這裡會逐個輸出演員的名稱

3.周遊單獨的map集合

這個不是很好記,但是用的幾率也不小

4.算術運算符

FreeMarker表達式中完全支援算術運算,FreeMarker支援的算術運算符包括:+, - , * , / , %

5.比較運算符

表達式中支援的比較運算符有如下幾個:

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

2,!=:判斷兩個值是否不等.

3,>或者gt:判斷左邊值是否大于右邊值

4,>=或者gte:判斷左邊值是否大于等于右邊值

5,<或者lt:判斷左邊值是否小于右邊值

6,<=或者lte:判斷左邊值是否小于等于右邊值

注意:=和!=可以用于字元串,數值和日期來比較是否相等,但=和!=兩邊必須是相同類型的值,否則會産生錯誤,而且FreeMarker是精确比較,"x","x ","X"是不等的.其它的運作符可以作用于數字和日期,但不能作用于字元串,大部分的時候,使用gt等字母運算符代替>會有更好的效果,因為FreeMarker會把>解釋成FTL标簽的結束字元,當然,也可以使用括号來避免這種情況,如:<#if (x>y)>

6.邏輯運算符

和普通程式一樣,freemarker也有&&,|| ,!三種

7.if的使用

這是一個典型的分支控制指令,該指令的作用完全類似于Java語言中的if,if指令的文法格式如下:

8 include指令

include指令的作用類似于JSP的包含指令,用于包含指定頁.include指令的文法格式如下:

<#include filename [options]>

在上面的文法格式中,兩個參數的解釋如下:

filename:該參數指定被包含的模闆檔案

options:該參數可以省略,指定包含時的選項,包含encoding和parse兩個選項,其中encoding指定包含頁面時所用的解碼集,而parse指定被包含檔案是否作為FTL檔案來解析,如果省略了parse選項值,則該選項預設是true.

9 import指令

該指令用于導入FreeMarker模闆中的所有變量,并将該變量放置在指定的Map對象中,import指令的文法格式如下:

<#import "/lib/common.ftl" as com>

上面的代碼将導入/lib/common.ftl模闆檔案中的所有變量,交将這些變量放置在一個名為com的Map對象中.

10.變量的聲明

<#assign num=0/>

11 macro的使用

這個可以用來實作自定義指令,一般用來做公共元件,例如分頁條

最後說下list中含有map的周遊,這種情況可以使用點文法或方括号文法.假如有下面的資料模型:

Map root = new HashMap();

Book book = new Book();

Author author = new Author();

author.setName("annlee");

author.setAddress("gz");

book.setName("struts2");

book.setAuthor(author);

root.put("info","struts");

root.put("book", book);

為了通路資料模型中名為struts2的書的作者的名字,可以使用如下文法:

book.author.name    //全部使用點文法

book["author"].name

book.author["name"]    //混合使用點文法和方括号文法

book["author"]["name"]   //全部使用方括号文法

另外freemarker也注意空值的處理,具體的可以參考這篇