Freemarker的基本語法及使用
freemarker的基本語法及使用
一、freemarker模板檔案(*.ftl)的基本組成部分
1. 文字:直接輸出的內容部分
2. 註釋:不會輸出的內容,格式為<#-- 註釋內容 -->
3. 取值(插值):代替輸出資料模型的部分,格式為${資料模型}或#{資料模型}
4. ftl指令:Freemarker指令,類似於HTML標記。
內建指令:開始標籤:<#directivename parameter> 結束標籤:</#directivename> 空標籤:<#directivename parameter/>
自定義指令:開始標籤:<@directivename parameter> 結束標籤:</@directivename> 空標籤:<@directivename parameter/> 至於什麼是內建指令,什麼是自定義指令 我會在下面敘述到。
二、Freemarker語法及使用方法
1. 取值(插值)指令及適用型別:
(1) ${var}
適用型別:java中常用的八大基本型別以及我們的String引用型別,但是,freemarker中boolean型別顯示時true==yes false==no
示例:
在後臺文件中定義變數
String strVar = "世界你好";
int intVar = 10;
boolean booVar = true;
在頁面中獲取變數:
String獲取:<font color="red"> ${strVar} </font><br>
int獲取:<font color="red"> ${intVar} </font><br>
boolean獲取:<font color="red"> ${booVar?string("yes","no")} </font>
展示結果:
String獲取:世界你好
int獲取:10
boolean獲取:yes
(2)${var!}
適用型別:對 null 或者不存在的物件進行取值,可以設定預設值,例:${var!'我是預設值'} 即,有值時顯示正常值,無值時顯示預設值
示例:
在後臺文件中定義變數
String strVar = "世界你好";
String str = null;
在頁面中獲取變數:
String獲取:<font color="red"> ${strVar!"我是空"} </font><br>
str獲取:<font color="red"> ${str!} </font><br>
str獲取:<font color="red"> ${str!"預設"} </font><br>
展示結果:
String獲取:世界你好
str獲取:
str獲取:預設
(3)${封裝物件.屬性}
適用型別:對封裝物件進行取值,例:${User.name}
示例:
在後臺文件中封裝物件User[ name, age ]
String name = "姓名";
int age = 18;
在頁面中獲取變數:
name獲取:<font color="red"> ${User.name} </font><br>
age獲取:<font color="red"> ${User.age} </font><br>
展示結果:
name獲取:姓名
age獲取:18
(4)${date?String('yyyy-MM-dd')}
適用型別:對日期格式進行取值,在這裡我要強調的是,定義Date型別的變數時,java.util.Date無法輸出日期,須使用java.sql.Date
示例:
在後臺文件中定義變數
java.sql.Date date = new Date().getTime();
java.sql.Date time = new Date().getTime();
java.sql.Date datetime = new Date().getTime();
在頁面中獲取變數:
date獲取:<font color="red"> ${date?string('yyyy-MM-dd')} </font><br>
time獲取:<font color="red"> ${date?string('HH:mm:ss')} </font><br>
datetime獲取:<font color="red"> ${date?string('yyyy-MM-dd HH:mm:ss')} </font><br>
展示結果:
name獲取:姓名
age獲取:18
(5)${var?html}
適用型別:轉義HTML內容
示例:
在後臺文件中封裝變數Menu[ name, model ]
Menu m = new Menu();
m.setName(" freemarker ");
m.setModel("<font color = 'red'>我只是個選單</font>");
在頁面中獲取變數:
非轉義獲取:<font color="red"> ${m.model} </font><br>
轉義獲取: ${m.model?html} </font><br>
展示結果:
非轉義獲取:我只是個選單
轉義獲取:<font color = 'red'>我只是個選單</font>
(6)<#assign num = 100 />
適用型別:定義變數,支援計算和賦值
示例:
在頁面中定義變數:
<#assign num = 100 />
num獲取:<font color="red"> ${num)} </font><br>
計算結果:<font color="red"> ${num * 10} </font><br>
展示結果:
num獲取:100
計算結果:1000
(7)對List集合進行取值
<#list list集合 as item>
${item} --取值
</#list>
示例:
在後臺文件中定義變數
List<String> strList = new ArrayList<String>();
strList.add("第一個值");
strList.add("第二個值");
strList.add("第三個值");
在頁面中獲取變數:
<#list strList as item>
${item!}<br/> --取值
</#list>
展示結果:
第一個值
第二個值
第三個值
(8)對Map集合進行取值
<#list map?keys as key>
${key}:${map[key]}
</#list>
示例:
在後臺文件中定義變數
Map<String, Object> m = new HashMap<String, Object>();
m.put("name","姓名");
m.put("age",18);
m.put("sex","男");
在頁面中獲取變數:
<#list m?keys as key>
${key}:${m[key]}
</#list>
展示結果:
name:姓名
age:18
sex:男
2. 條件判斷指令:
(1) if
格式:<#if 條件>
輸出
</#if>
示例:
在頁面中定義變數並判斷條件:
<#assign age = 18 /><br>
<#if age == 18>
<font color="red"> age = 18</font>
</#if>
展示結果:
age = 18
(2) if - else
格式:<#if 條件>
輸出
<#else>
輸出
</#if>
示例:
在頁面中定義變數並判斷條件:
<#assign age = 20 /><br>
<#if age == 18>
<font color="red"> age = 18</font>
<#else>
<font color="red"> age != 18</font>
</#if>
展示結果:
age != 18
(3) if - elseif - else
格式:<#if 條件1>
輸出
<#elseif 條件2>
輸出
<#else>
輸出
</#if>
示例:
在頁面中定義變數並判斷條件:
<#assign age = 20 /><br>
<#if age > 18>
<font color="red">青年</font>
<#elseif age == 18>
<font color="red"> 成年</font>
<#else>
<font color="red"> 少年</font>
</#if>
展示結果:
成年
(4) switch --常與case break default一起使用 引數可為字串
格式:<#switch var>
<#case 條件1>
輸出
<#break>
<#case 條件2>
輸出
<#break>
<#default>
輸出
</#switch>
示例:
在頁面中定義變數並判斷:
<#switch var="星期一">
<#case "星期一">
油燜大蝦
<#break>
<#case "星期二">
炸醬麵
<#break>
<#default>
肯德基
</#switch>
展示結果:
油燜大蝦
3. 自定義函式、自定義指令:
(1) 自定義函式
實現TemplateMthodModelEx
(2) 自定義指令
實現TemplateDirectiveModel
示例:
<@自定義指令名稱 入參(key-value格式) ; 出參(list格式)>
執行條件
</@自定義指令名稱>
PS:不同的返回值用逗號( , )間隔開
4.常用內建函式、macro(巨集指令)、function(函式指令):
(1) 常用內建函式
處理字串:
substring 擷取字串,包頭不包尾(下標)
cap_first 第一個字母大寫
end_with 以什麼字母結尾
contains 是否包含目標字串
date datetime time 轉換成日期格式
starts_with 以什麼字母開頭
index_of 返回某個指定的字串值在字串中首次出現的位置(下標)
last_index_of 獲取指定字元出現的最後位置(下標)
split 分隔
trim 去兩端空格
處理數字:
string
x?string("0.##") 變成小數點後幾位
round 四捨五入
floor 去掉小數點
ceiling 近1 變成整數
處理list:
first: 取List值第一個值
last: 取List值最後一個值
seq_contains: 是否包含指定字元
seq_index_of: 指定字元所在位置
size: 集合大小
reverse: 集合倒序排列
sort: 對集合進行排序
sort_by: 根據某一個屬性排序
chunk: 分塊處理
其他:
is_string: 是否為字元型別
is_number: 是否為整數型別
is_method: 是否為方法
(): 判斷整個變數
has_content: 判斷物件是否為空或不存在
eval: 求值
(2) macro(巨集指令)
呼叫:<@macro_name param />
語法:<#macro 變數名 引數>
<#nested/>
</#macro>
(3) function(函式指令)
呼叫:${function_name(param)}
語法:<#function 變數名 引數>
<#return>
</#function>0