深入了解Freemarker模板文件(.ftl文件)

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}歲

排序後:

a.age - b.age)>

${user.name},${user.age}歲

在上述示例中,使用?sort函數對用戶列表數據進行了按年齡從小到大的排序,排序後輸出用戶列表。

五、總結

在本文中,我們深入了解了Freemarker模板文件的多個方面,包括數據模型、指令、內置函數等。通過這些知識點,我們可以更高效地使用Freemarker來生成我們想要的網頁、郵件或文件等。

原創文章,作者:JPSXR,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/372187.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
JPSXR的頭像JPSXR
上一篇 2025-04-24 06:40
下一篇 2025-04-24 06:40

相關推薦

發表回復

登錄後才能評論