日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

freemarker的常用内建函数

發布時間:2025/5/22 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 freemarker的常用内建函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載:https://blog.csdn.net/qq779890006/article/details/78490368
為什么要使用網頁靜態化技術
網頁靜態化解決方案在實際開發中運用比較多,例如新聞網站,門戶網站中的新聞頻道
或者是文章類的頻道。
對于電商網站的商品詳細頁來說,至少幾百萬個商品,每個商品又有大量的信息,這樣
的情況同樣也適用于使用網頁靜態化來解決。
網頁靜態化技術和緩存技術的共同點都是為了減輕數據庫的訪問壓力,但是具體的應用
場景不同,緩存比較適合小規模的數據,而網頁靜態化比較適合大規模且相對變化不太頻繁
的數據。另外網頁靜態化還有利于SEO。
另外我們如果將網頁以純靜態化的形式展現,就可以使用Nginx 這樣的高性能的web
服務器來部署。Nginx 可以承載5 萬的并發,而Tomcat 只有幾百

什么是Freemarker
FreeMarker 是一個用 Java 語言編寫的模板引擎,它基于模板來生成文本輸出。FreeMarker與 Web 容器無關,即在 Web 運行時,它并不知道 Servlet 或 HTTP。它不僅可以用作表現層的實現技術,而且還可以用于生成 XML,JSP 或 Java 等。

Freemarker入門

1. 工程依賴

<dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.23</version> </dependency>

2. 創建模板文件
1、文本,直接輸出的部分
2、注釋,即<#–…–>格式不會輸出
3、插值(Interpolation):即${..}部分,將使用數據模型中的部分替代輸出
4、FTL指令:FreeMarker指令,和HTML標記類似,名字前加#予以區分,不會輸出。
我們現在就創建一個簡單的創建模板文件test.ftl

<html> <head><meta charset="utf-8"><title>Freemarker入門小DEMO </title> </head> <body> <#--我只是一個注釋,我不會有任何輸出 --> ${name},你好。${message} </body> </html>

3. 生成文件
使用步驟:
第一步:創建一個 Configuration 對象,直接 new 一個對象。構造方法的參數就是 freemarker的版本號。
第二步:設置模板文件所在的路徑。
第三步:設置模板文件使用的字符集。一般就是 utf-8.
第四步:加載一個模板,創建一個模板對象。
第五步:創建一個模板使用的數據集,可以是 pojo 也可以是 map。一般是 Map。
第六步:創建一個 Writer 對象,一般創建一 FileWriter 對象,指定生成的文件名。
第七步:調用模板對象的 process 方法輸出文件。
第八步:關閉流

//1.創建配置類Configuration configuration=new Configuration(Configuration.getVersion());//2.設置模板所在的目錄 configuration.setDirectoryForTemplateLoading(new File("D:/pinyougou_work/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", "hello freemarker");//6.創建Writer對象Writer out =new FileWriter(new File("d:\\test.html"));//7.輸出template.process(map, out);//8.關閉Writer對象out.close();

執行后,在D盤根目錄即可看到生成的test.html ,打開看看

4. FTL 指令
assign指令

定義簡單類型 <#assign linkman="周先生"> 聯系人:${linkman} 定義對象類型 <#assign info={"mobile":"13301231212",'address':'北京市昌平區'} > 電話:${info.mobile} 地址:${info.address}

?

include 指令
此指令用于模板文件的嵌套

創建模板文件head.ftl <h1>title</h1> 我們修改test.ftl,在模板文件中使用include指令引入剛才我們建立的模板 <#include "head.ftl">

if指令

<#if success=true>你已通過實名認證 <#else> 你未通過實名認證 </#if>

在代碼中對str變量賦值

map.put("success", true);

在freemarker的判斷中,可以使用= 也可以使用==

list指令
(1)代碼中對變量goodsList賦值

List goodsList=new ArrayList();Map goods1=new HashMap();goods1.put("name", "蘋果");goods1.put("price", 5.8);Map goods2=new HashMap();goods2.put("name", "香蕉");goods2.put("price", 2.5);Map goods3=new HashMap();goods3.put("name", "橘子");goods3.put("price", 3.2);goodsList.add(goods1);goodsList.add(goods2);goodsList.add(goods3);map.put("goodsList", goodsList); --------------------- 作者:你們的王大人 來源:CSDN 原文:https://blog.csdn.net/qq779890006/article/details/78490368 版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

(2)在模板文件上添加

----商品價格表----<br> <#list goodsList as goods>${goods_index+1} 商品名稱: ${goods.name} 價格:${goods.price}<br> </#list>

內建函數
內建函數語法格式: 變量+?+函數名稱
我們使用size函數來實現,代碼如下:

共 ${goodsList?size} 條記錄


轉換JSON字符串為對象

<#assign text="{'bank':'工商銀行','account':'10101920201920212'}" /><#assign data=text?eval />開戶行:${data.bank} 賬號:${data.account}

日期格式化
代碼中對變量賦值:

dataModel.put("today", new Date());

在模板文件中加入

當前日期:${today?date} <br> 當前時間:${today?time} <br> 當前日期+時間:${today?datetime} <br> 日期格式化: ${today?string("yyyy年MM月")}

數字轉換為字符串
代碼中對變量賦值:

map.put("point", 102920122);

修改模板:

累計積分:${point}

空值處理運算符
判斷某變量是否存在:“??”
用法為:variable??,如果該變量存在,返回true,否則返回false

<#if aaa??>aaa變量存在 <#else>aaa變量不存在 </#if>

缺失變量默認值:“!”
我們除了可以判斷是否為空值,也可以使用!對null值做轉換處理
在模板文件中加入

${aaa!'-'} 使用內建函數 內建函數很像子變量(如果了解Java術語的話,也可以說像方法), 它們并不是數據模型中的東西,是 FreeMarker 在數值上添加的。 為了清晰子變量是哪部分,使用 ?(問號)代替 .(點)來訪問它們。常用內建函數的示例:user?html 給出 user 的HTML轉義版本, 比如 & 會由 &amp; 來代替。user?upper_case 給出 user 值的大寫版本 (比如 "JOHN DOE" 來替代 "John Doe")animal.name?cap_first 給出 animal.name 的首字母大寫版本(比如 "Mouse" 來替代 "mouse")user?length 給出 user 值中 字符的數量(對于 "John Doe" 來說就是8)animals?size 給出 animals 序列中 項目 的個數(我們示例數據模型中是3個)如果在 <#list animals as animal> 和對應的 </#list> 標簽中:animal?index 給出了在 animals 中基于0開始的 animal的索引值animal?counter 也像 index, 但是給出的是基于1的索引值animal?item_parity 基于當前計數的奇偶性,給出字符串 "odd" 或 "even"。在給不同行著色時非常有用,比如在 <td class="${animal?item_parity}Row">中。一些內建函數需要參數來指定行為,比如:animal.protected?string("Y", "N") 基于 animal.protected 的布爾值來返回字符串 "Y" 或 "N"。animal?item_cycle('lightRow','darkRow') 是之前介紹的 item_parity 更為常用的變體形式。fruits?join(", ") 通過連接所有項,將列表轉換為字符串, 在每個項之間插入參數分隔符(比如 "orange,banana")user?starts_with("J") 根據 user 的首字母是否是 "J" 返回布爾值true或false。內建函數應用可以鏈式操作,比如user?upper_case?html 會先轉換用戶名到大寫形式,之后再進行HTML轉義。(這就像可以鏈式使用 .(點)一樣) 內建函數

?

運算符
算數運算符
FreeMarker表達式中完全支持算術運算,FreeMarker支持的算術運算符包括:+, - , * , / , %

邏輯運算符
邏輯運算符有如下幾個:
邏輯與:&&
邏輯或:||
邏輯非:!
邏輯運算符只能作用于布爾值,否則將產生錯誤

比較運算符
表達式中支持的比較運算符有如下幾個:
1 =或者==:判斷兩個值是否相等.
2 !=:判斷兩個值是否不等.
3 >或者gt:判斷左邊值是否大于右邊值
4 >=或者gte:判斷左邊值是否大于等于右邊值
5 <或者lt:判斷左邊值是否小于右邊值
6 <=或者lte:判斷左邊值是否小于等于右邊值

注意: =和!=可以用于字符串,數值和日期來比較是否相等,但=和!=兩邊必須是相同類型的值,否則會產生錯誤,而且FreeMarker是精確比較,”x”,”x “,”X”是不等的.其它的運行符可以作用于數字和日期,但不能作用于字符串,大部分的時候,使用gt等字母運算符代替>會有更好的效果,因為 FreeMarker會把>解釋成FTL標簽的結束字符,當然,也可以使用括號來避免這種情況,如:<#if (x>y)>

?

轉載于:https://www.cnblogs.com/lxk233/p/9596487.html

總結

以上是生活随笔為你收集整理的freemarker的常用内建函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。