更新時(shí)間:2023-06-21 來(lái)源:黑馬程序員 瀏覽量:
Freemarker是一款 模板引擎:即一種基于模板和要改變的數(shù)據(jù),并用來(lái)生成輸出文本(HTML網(wǎng)頁(yè),電子郵件,配置文件,源代碼等)的通用工具。它不是面向最終用戶(hù)的,而是一個(gè)Java類(lèi)庫(kù),是一款程序員可以嵌入他們所開(kāi)發(fā)產(chǎn)品的組件。
Freemarker基礎(chǔ)語(yǔ)法種類(lèi)
1、注釋?zhuān)?lt;#-- -->,介于其之間的內(nèi)容會(huì)被freemarker忽略
<#--我是一個(gè)freemarker注釋-->2、插值(Interpolation):即${..}部分,freemarker會(huì)用真實(shí)的值代替${..}
Hello ${name}
3、FTL指令:和HTML標(biāo)記類(lèi)似,名字前加#予以區(qū)分,F(xiàn)reemarker會(huì)解析標(biāo)簽中的表達(dá)式或邏輯。
<# >FTL指令</#>
4、文本,僅文本信息,這些不是freemarker的注釋、插值、FTL指令的內(nèi)容會(huì)被freemarker忽略解析,直接輸出內(nèi)容。
<#--freemarker中的普通文本--> 我是一個(gè)普通的文本
集合指令-List
集合指令List的指令格式如下:
<#list></#list>
例子:
<#list stus as stu> <tr> <td>${stu_index+1}</td> <td>${stu.name}</td> <td>${stu.age}</td> <td>${stu.money}</td> </tr> </#list>
${k_index}:得到循環(huán)的下標(biāo),使用方法是在stu后邊加"_index",它的值是從0開(kāi)始。
集合指令-Map
1.獲取map中的值
map['keyname'].property map.keyname.property
2.遍歷map
<#list userMap?keys as key> key:${key}--value:${userMap["${key}"]} </#list>
if指令
if指令的語(yǔ)法格式如下:
<#if expression> <#else> </#if>
需求:在list集合中判斷學(xué)生為小紅的數(shù)據(jù)字體顯示為紅色。
<#if stu.name='小紅'> <tr style="color: red"> <td>${stu_index}</td> <td>${stu.name}</td> <td>${stu.age}</td> <td>${stu.money}</td> </tr> <#else > <tr> <td>${stu_index}</td> <td>${stu.name}</td> <td>${stu.age}</td> <td>${stu.money}</td> </tr> </#if>
在freemarker中,判斷是否相等,=與==是一樣的。
FreeMarker表達(dá)式中完全支持算術(shù)運(yùn)算,FreeMarker支持的算術(shù)運(yùn)算符包括:
①加法:+
②減法:-
③乘法:*
④除法:/
⑤求模(求余):%
常見(jiàn)的比較運(yùn)算符,和它們用途說(shuō)明如下表:
注意事項(xiàng):=和!=可以用于字符串、數(shù)值和日期來(lái)比較是否相等?
=和!=兩邊必須是相同類(lèi)型的值,否則會(huì)產(chǎn)生錯(cuò)誤?字
符串"x"、"x "、"X"比較是不等的.因?yàn)镕reeMarker是精確比較?
gt代替>, FreeMarker會(huì)把>解釋成FTL標(biāo)簽的結(jié)束字符,可使用括號(hào)避免這種情況,如:<#if (x>y)>
空值處理
1、判斷某變量是否存在使用"??"用法為:variable??,如果該變量存在,返回true,否則返回false。
例:為防止stus為空?qǐng)?bào)錯(cuò)可以加上判斷如下:
<#if stus??> <#list stus as stu> ...... </#list> </#if>
2、缺失變量默認(rèn)值使用"!"
使用!要以指定一個(gè)默認(rèn)值,當(dāng)變量為空時(shí)顯示默認(rèn)值,例如${name!''}表示如果name為空顯示空字符串。?
如果是嵌套對(duì)象則建議使用()括起來(lái),例如${(stu.name)!''}表示,如果stu或name為空默認(rèn)顯示空字符串。
內(nèi)建函數(shù)
內(nèi)建函數(shù)語(yǔ)法格式:變量+?+函數(shù)名稱(chēng)
1.集合的大小。
${集合名?size}
2.日期格式化
顯示年月日: ${today?date} 顯示時(shí)分秒:${today?time} 顯示日期+時(shí)間:${today?datetime} 自定義格式化:${today?string("yyyy年MM月")}
3.內(nèi)建函數(shù)c
model.addAttribute("point", 102920122);
point是數(shù)字型,使用${point}會(huì)顯示這個(gè)數(shù)字的值,每三位使用逗號(hào)分隔。如果不想顯示為每三位分隔的數(shù)字,可以使用c函數(shù)將數(shù)字型轉(zhuǎn)成字符串輸出。
${point?c}
4.將json字符串轉(zhuǎn)成對(duì)象
一個(gè)例子:其中用到了assign標(biāo)簽,assign的作用是定義一個(gè)變量。
<#assign text="{'bank':'工商銀行','account':'10101920201920212'}" /> <#assign data=text?eval /> 開(kāi)戶(hù)行:${data.bank}賬號(hào):${data.account}