Freemarker語法以及簡單使用
Freemarker簡單使用
- 先建立一個簡單的Maven工程(這裡預設大家都會啦),然後引入依賴
<!-- https://mvnrepository.com/artifact/org.freemarker/freemarker --> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.28</version> </dependency>
- 在resources下建立模板檔案test.ftl
- 模板檔案中四種元素
- 1、文字,直接輸出的部分
- 2、註釋,即<#–…-->格式不會輸出
- 3、插值(Interpolation):即${…}部分,將使用資料模型中的部分替代輸出
- 4、FTL指令:FreeMarker指令,和HTML標記類似,名字前加#予以區分,不會輸出。
- 模板檔案中四種元素
<html> <head> <meta charset="utf-8"> <title>Freemarker入門DEMO </title> </head> <body> ${name}, 你好。${message} </body> </html>
- 建立Test.java類,在main方法中寫上下列方法
//1.建立配置類 Configuration configuration=new Configuration(Configuration.getVersion()); //2.設定模板所在的目錄 configuration.setDirectoryForTemplateLoading(new File("H:/freemarkerDemo/src/main/resources/")); //3.設定字符集 configuration.setDefaultEncoding("utf-8"); //4.載入模板 Template template = configuration.getTemplate("test.ftl"); //5.建立資料模型 Map map=new HashMap(); map.put("name", "小豬佩奇 "); map.put("message", "Freemark靜態化世界體驗!!"); //6.建立Writer物件 Writer out =new FileWriter(new File("H:\\test.html"));//這裡是輸出檔案地址 //7.輸出 template.process(map, out); //8.關閉Writer物件 out.close();
總結如下:
第一步:建立一個 Configuration 物件,直接 new 一個物件。構造方法的引數就是freemarker的版本號。
第二步:設定模板檔案所在的路徑。
第三步:設定模板檔案使用的字符集。一般就是 utf-8.
第四步:載入一個模板,建立一個模板物件。
第五步:建立一個模板使用的資料集,可以是 pojo 也可以是 map。一般是 Map。
第六步:建立一個 Writer 物件,一般建立一 FileWriter 物件,指定生成的檔名。
第七步:呼叫模板物件的 process 方法輸出檔案。
第八步:關閉流
執行後,在H盤根目錄即可看到生成的test.html ,開啟看到如下
FTL常見語法
- assign指令:此指令用於在頁面上定義一個變數
定義簡單型別:
<#assign linkman="小豬佩奇">
聯絡人:${linkman}
輸出結果:
定義物件型別:
<#assign info={"mobile":"112233",'address':'深圳市南山區南頭檢查站','pepole':'波波安'} >
<br>電話:${info.mobile} 地址:${info.address} 聯絡人:${info.pepole}<br>
輸出結果:
- include指令:此指令用於模板檔案的巢狀
建立模板檔案head.ftl
<h1>測試標題</h1>
修改test.ftl,在模板檔案中使用include指令引入剛才我們建立的模板
<#include "head.ftl">
- if指令
在程式碼中對str變數賦值
map.put("success", true);
在模板檔案上新增
<#if success="true">
${name},你好。${message}
<#else >
沒有通過哦
</#if>
輸出結果:
在freemarker的判斷中,可以使用= 也可以使用==
- list指令
程式碼中對變數phoneList賦值
List phoneList = new ArrayList();
Map map1=new HashMap();
map1.put("name", "華為 ");
map1.put("price", 9999);
Map map2=new HashMap();
map2.put("name", "蘋果 ");
map2.put("price", 13999);
Map map3=new HashMap();
map3.put("name", "三星 ");
map3.put("price", 8888);
在模板檔案上新增
<br>----商品價格表----<br>
<#list phoneList as phones>
${phones_index+1} 商品名稱: ${phones.name} 價格:${phones.price}<br>
</#list>
輸出結果:
如果想在迴圈中得到索引,使用迴圈變數+_index就可以得到。
- 內建函式
語法格式: 變數+?+函式名稱
獲取集合大小
我們使用size函式來實現得到某個集合的大小,程式碼如下:
共 ${phoneList?size} 條記錄
輸出結果:
- 轉換JSON字串為物件
將json字串轉換為物件,
<br>轉換JSON字串<br>
<#assign text="{'city':'深圳','str':'寶安區新安街道'}" />
<#assign data=text?eval />
城市:${data.city} 街區:${data.str}
輸出結果:
- 日期格式化
程式碼中對變數賦值:
dataModel.put("today", new Date());
在模板檔案中加入
當前日期:${today?date} <br>
當前時間:${today?time} <br>
當前日期+時間:${today?datetime} <br>
日期格式化: ${today?string("yyyy年MM月")}
執行效果如下:
- 數字轉換為字串
程式碼中對變數賦值:
map.put("tostring", 123456781);
修改模板:
轉化後:${tostring}
有些時候我們不需要這個分隔符,就需要將數字轉換為字串,使用內建函式c
轉化後:${tostring?c}
頁面顯示效果如下:
- 空值處理運算子
模板中使用了變數但是在程式碼中沒有對變數賦值,執行生成時會丟擲異常。
1.判斷某變數是否存在:“??”
用法為:variable??,如果該變數存在,返回true,否則返回false
<br>測試空字串<br>
<#if testnull??>
testnull為空
<#else>
testnull不為空
</#if>
2.缺失變數預設值:“!”
除了可以判斷是否為空值,也可以使用!對null值做轉換處理
<br>缺失變數預設值<br>
${nnull!'預設值'}
當aaa為null則返回!後邊的內容-
- 運算子
算數運算子
FreeMarker表示式中完全支援算術運算,FreeMarker支援的算術運算子包括:+, - , * , / , %
邏輯運算子
邏輯與:&&
邏輯或:||
邏輯非:!
邏輯運算子只能作用於布林值,否則將產生錯誤
比較運算子
1. =或者==:判斷兩個值是否相等.
2. !=:判斷兩個值是否不等.
3. >或者gt:判斷左邊值是否大於右邊值
4. >=或者gte:判斷左邊值是否大於等於右邊值
5. <或者lt:判斷左邊值是否小於右邊值
6. <=或者lte:判斷左邊值是否小於等於右邊值
注意:
=和!=可以用於字串,數值和日期來比較是否相等,但=和!=兩邊必須是相同型別的值,否則會產生錯誤,而且FreeMarker是精確比較,“x”,"x ","X"是不等的.
其它的執行符可以作用於數字和日期,但不能作用於字串,大部分的時候,使用gt等字母運算子代替>會有更好的效果,因為FreeMarker會把>解釋成FTL標籤的結束字元,當然,也可以使用括號來避免這種情況,如:<#if (x>y)>