Freemarker 常用的指令與內建函式
freemarker是比較好用的網頁靜態化技術 ,於是寫了這個部落格記錄下學習它的常用指令和內建函式
下面是個入門小案例:
先準備一個模板,字尾是ftl結尾的格式
<html>
<head>
<title>你好freemarker</title>
</head>
<body>
${name},歡迎您來到神奇的${message}世界
</body>
</html>
然後導包:
<dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.23</version> </dependency>
然後編碼:(注意:這裡選擇路徑時最好選擇全路徑,不要選擇相對路徑)
//1,建立配置物件 Configuration configuration = new Configuration(Configuration.getVersion()); //2,設定要載入的模板路徑,必須是個"資料夾"; configuration.setDirectoryForTemplateLoading(new File("F:\\freemarker-demo\\src\\main\\resources")); //3,設定編碼字符集 configuration.setDefaultEncoding("utf-8"); //4,通過檔名獲取模板物件 Template template = configuration.getTemplate("html_template.ftl"); //5,設定資料來源,可以是map或者pojo,一般選擇map,更靈活 HashMap<String, Object> map = new HashMap<String, Object>(); map.put("name", "張三"); map.put("message", "freemarker"); //建立一個輸出io流,設定寫出檔案路徑 Writer writer = new FileWriter("F:/javatest/test.html"); //執行輸出 template.process(map,writer); //關流 writer.close();
效果: 張三 , 歡迎您來到神奇的 freemarker 世界
(以下很多用的都是程式碼裡面定義的變數..)
常用的 FTL指令
1, #assign 用於定義變數和定義一個json物件
<#assign linkman='李四'>
${linkman}
<#assign pojo={"name":"麻子","age":25,"sex":"男"}>
${pojo.name},,,${pojo.age},,,${pojo.sex}
2, #include 用於模板檔案的巢狀,和html裡面的include功能類似
<#include 'header.ftl'>
3, #if指令 用以判斷,不同的是,它需要夾著使用,可配合#else指令一起使用
<#if success==true>
<#--ftl指令中 =和== 都是判斷的意思-->
成功!
<#else>
失敗!
</#if>
4, #list指令 表示遍歷集合
要是想要獲得迴圈中每個元素的索引則為$ {xxx_index}獲取
<#list goodsList as goods>
序號: ${goods_index+1} 名字: ${goods.name} 價格: ${goods.price}
</#list>
內建函式 語法格式: 變數+?+函式名稱
1, 獲取集合的長度
集合尺寸: ${goodsList?size}
2, 轉換JSON字串為js物件
<#assign pojo='{"name":"麻子","age":25,"sex":"男"}'/>
<#--意思是 申明另外一個變數data接收pojo呼叫eval方法生成的js物件-->
<#assign data=pojo?eval/>
${data.name},,,${data.age},,,${data.sex}
3,日期格式化
當前日期:${today?date}
當前時間:${today?time}
當前日期+時間:${today?datetime}
日期格式化: ${today?string("yyyy 年 MM 月")}
結果效果:
當前日期:2018-11-20
當前時間:14:43:52
當前日期+時間:2018-11-20 14:43:52
日期格式化: 2018年11月
4,數字轉化為字串
<#assign number=123456789>
${number}
展示效果是: 123,456,789
當不需要中間的逗號時需要轉化為字串
${number?c}
展示效果是: 123456789
5, 空值處理運算子
判斷某變數是否存在:“??”
用法為:variable??,如果該變數存在,返回 true,否則返回 false
<#if aaa??>
aaa 變數存在
<#else>
aaa 變數不存在
</#if>
缺失變數預設值:“!”
${aaa!"}
這樣表示當aaa為null時用''空字串代替,防止變數缺失值時程式報錯
6,算術運算子
這個和平時用的差不多一樣,,就是注意一點,ftl語法中 = 和 == 都可用於邏輯判斷
在大於小於比較時,> 可以用 gt 代替,.因為 FreeMarker 會把 > 解釋成 FTL 標籤的結束字元,當然,也可以使用括號()來避免這種情況