Freemarker是一種模板引擎,它採用一個測試驅動的數據集生成任何類型的XML(markup languages)或非XML導出。它是一款圖靈獎獲獎的軟件,具有流行、可靠、快速和免費的特性。
一、Freemarker概述
Freemarker的基礎概念是模板(template)和數據模型(data model)。模板是一個頁面的框架,而數據模型定義了此頁面中使用的數據。模板通過結合數據模型將數據嵌入到頁面中生成最終的文本。
Freemarker模板文件使用.ftl作為文件後綴名。在模板中可以使用$和#兩種語法來訪問數據模型中的數據。
二、Freemarker數據模型
Freemarker的數據模型可以是一個JavaBean,Map,數組或者元素均為Java對象的List。在模板中通過使用${}和#{}訪問數據模型中的數據。其中,${}訪問的是數據模型中的值,而#{}是用於訪問數據模型中的方法。
/** * 數據模型示例: */ public class User { private String name; private int age; //getters and setters } User user = new User("張三", 22); //生成數據模型
/** * 在.ftl模板文件中,使用${}訪問數據模型中的值示例: */ ${user.name} //輸出:張三 ${user.age} //輸出:22
上述代碼示例中的user是數據模型的一個實例,${user.name}以點號(.)形式訪問了User類中的name屬性。
三、Freemarker指令
在Freemarker模板文件中,#開頭的語句是指令,用於對模板進行控制,例如:條件判斷,循環等。
1、#if和#else
#if指令用於控制模板是否展示某一段內容,其後要跟上一個判斷表達式。如果表達式為真,則展示if和else之間的內容;如果表達式為假,則展示#else和if之間的內容。
/** * #if指令的示例代碼: */ #if(user.age > 18)已成年
#else未成年
在上述示例中,如果user的年齡大於18歲,則顯示”已成年”這段文本;否則顯示”未成年”這段文本。
2、#list
#list指令用於循環輸出一組數據,並且可以使用#else指令在數據為空時輸出特定文本。
/** * #list指令的示例代碼: */
-
#list(users as user)
- ${user.name} #else
- 暫無用戶數據 #end
在上述示例中,users是數據模型中的一組數據,通過#list指令循環遍歷,並將user對象的name屬性輸出到li標籤中。如果users為空,則輸出”暫無用戶數據”這段文本。
3、#include
#include指令用於將指定的模板文件包含到當前模板中,形式如下:
/** * #include指令的示例代碼: */
上述代碼中,將頭部信息模板文件header.ftl包含到了當前模板文件中。
4、#import
#import指令用於導入Java類或靜態成員(方法、字段),使用#assign指令將其賦值給模板中的變量。形式如下:
/** * #import指令的示例代碼: */ ${myMap.class.simpleName} //輸出:HashMap
在上述示例中,使用#import指令引入了Java的HashMap類,並使用#assign指令將其賦值給myMap變量。使用${myMap.class.simpleName}來訪問myMap變量中所包含的HashMap類。
四、Freemarker常用內置函數
Freemarker提供了許多內置函數,用於對數據進行處理,例如字符串截取、日期格式化等等。下面介紹幾個常用的內置函數:
1、字符串截取-?substring(start, end)
這個函數可以用於截取指定字符串的子串。其中,start參數表示起始位置,end參數表示結束位置(不包含在內)。
/** * ?substring函數示例代碼: */ ${"hello world"?substring(0, 5)} //輸出:hello
2、日期格式化-?string(format)
這個函數可以用於將一個日期對象格式化成指定格式的字符串。其中,format參數是一個文本模板,用於描述所需格式。
/** * ?string函數示例代碼: */ ${user.birthDate?string("yyyy-MM-dd")} //輸出:1998-08-12
3、集合排序-?sort
這個函數可以用於對列表或數組進行排序。默認按照自然順序排序,也可以自定義排序規則。
/** * ?sort函數示例代碼: */排序前:
${user.name},${user.age}歲
#list>排序後:
a.age - b.age)>${user.name},${user.age}歲
#list>
在上述示例中,使用?sort函數對用戶列表數據進行了按年齡從小到大的排序,排序後輸出用戶列表。
五、總結
在本文中,我們深入了解了Freemarker模板文件的多個方面,包括數據模型、指令、內置函數等。通過這些知識點,我們可以更高效地使用Freemarker來生成我們想要的網頁、郵件或文件等。
原創文章,作者:JPSXR,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/372187.html