1. 程式人生 > >Freemarker 常用的指令與內建函式

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 標籤的結束字元,當然,也可以使用括號()來避免這種情況