SpringBoot Freemarker基礎(chǔ)配置與使用方式
1.基礎(chǔ)配置
1.1引入依賴
<!-- 引入freemarker模板引擎的依賴 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>1.2在application.properties配置文件中添加如下配置:
# 是否開啟thymeleaf緩存,本地為false,生產(chǎn)建議為true spring.freemarker.cache=false spring.freemarker.charset=UTF-8 spring.freemarker.allow-request-override=false spring.freemarker.check-template-location=true #類型 spring.freemarker.content-type=text/html spring.freemarker.expose-request-attributes=true spring.freemarker.expose-session-attributes=true # #文件后綴 spring.freemarker.suffix=.ftl #路徑 .ftl文件就創(chuàng)建在templates下面或者子目錄 spring.freemarker.template-loader-path=classpath:/templates/
2.基礎(chǔ)使用
首先我在controller類中編寫一個(gè)測試接口用來測試使用,編寫內(nèi)容如下
@Controller
public class FreeMarkerController {
Map<String ,Object> map = new HashMap<>();
List<Object> list = new ArrayList();
@GetMapping("/freemaker/{id}/{name}")
public String demo(@PathVariable("id")String id ,@PathVariable("name") String name,Model model){
map.clear();
map.put("id",id);
map.put("name",name);
list.add(2);
list.add(4);
map.put("aa",null);
model.addAttribute("map",map);
model.addAttribute("list",list);
model.addAttribute("date",new Date());
return "index";
}
}
以下所有變量都是有上面接口提供
2.1調(diào)用map類型數(shù)據(jù),實(shí)體類也可使用此格式調(diào)用屬性
/*可直接獲取id對應(yīng)的v值*/
id:${map.id}
name:${map.name}
2.2集合調(diào)用,set集合也可用此格式調(diào)用相應(yīng)的元素
list01:${list[0]}
list02:${list[1]}
2.3,字符串拼接的兩種方法
${"你好啊${map.name}"}
${"你好啊"+map.name}
2.4FreeMarker表達(dá)式中支持“+”、“-”、“*”、“/”、“%”運(yùn)算符
${list[1]+list[0]}
${list[1]-list[0]}
${list[1]*list[0]}
${list[1]/list[0]}
${list[1]%list[0]}
2.5表達(dá)式中支持的比較運(yùn)算符有如下幾種:
1. =(或者==):判斷兩個(gè)值是否相等; 2. !=:判斷兩個(gè)值是否不相等; 注: =和!=可以用作字符串、數(shù)值和日期的比較,但兩邊的數(shù)據(jù)類型必須相同。而且FreeMarker的比較是精確比較,不會(huì)忽略大小寫及空格。 3. >(或者gt):大于 4. >=(或者gte):大于等于 5. <(或者lt):小于 6. <=(或者lte):小于等于 注: 上面這些比較運(yùn)算符可以用于數(shù)字和日期,但不能用于字符串。大部分時(shí)候,使用gt比>有更好的效果,因?yàn)镕reeMarker會(huì)把>解釋成標(biāo)簽的結(jié)束字符??梢允褂美ㄌ?hào)來避免這種
2.6時(shí)間格式轉(zhuǎn)換
${date?string("yyyy-MM-dd")}
2.7支持邏輯表達(dá)式
FreeMarker支持邏輯運(yùn)算但是只支持布爾型邏輯運(yùn)算兩個(gè)值進(jìn)行比較運(yùn)算的的時(shí)候需要添加括號(hào)才能進(jìn)行邏輯運(yùn)算,一般用于指令中 1. &&: 邏輯與; 2. ||:邏輯或; 3. !:邏輯非 邏輯運(yùn)算符只能用于布爾值。
2.8FreeMarker無法理解null值
FreeMarker的變量必須賦值,否則就會(huì)拋出異常。而對于FreeMarker來說,null值和不存在的變量是完全一樣的,因?yàn)镕reeMarker無法理解null值。
FreeMarker提供兩個(gè)運(yùn)算符來避免空值:
1.!運(yùn)算
1.1若是msg不存在不報(bào)異常默認(rèn)空值,若是不使用!會(huì)報(bào)異常<br>
${msg!}
1.2若是存在則輸出,若是不存在則默認(rèn)為abc<br>
${map.a!"abc"}<br>
2.??返回布爾值一般用在指令中下面會(huì)有引用此處不解釋<br>
2.9 if指令
<#if map.aa?? >
存在
<#else >
不存在
</#if>
<br>
<#if (list[0]>=3) >
優(yōu)秀
<#elseif (list[0]>=2)>
良好
<#else >
差勁
</#if>
2.10 list指令 遍歷
<#list list as li>
${li}<br>
</#list>
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
idea沒法識(shí)別springboot項(xiàng)目的原因解決及辦法
IDEA無法識(shí)別Spring Boot項(xiàng)目可能是由于Lombok依賴未正確解析所致,原pom.xml中未指定Lombok版本號(hào),導(dǎo)致依賴下載失敗,下面就來詳細(xì)的介紹一下解決方法,感興趣的可以了解一下2025-09-09
Spring Boot集成Spring Cloud Eureka進(jìn)行服務(wù)治理的方法
本文通過詳細(xì)的步驟和代碼示例,介紹了如何在Spring Boot中集成Spring Cloud Eureka進(jìn)行服務(wù)治理,通過這種方式,可以有效地管理和維護(hù)微服務(wù)架構(gòu)中的服務(wù),感興趣的朋友跟隨小編一起看看吧2024-11-11
Spring Cloud微服務(wù)架構(gòu)的構(gòu)建:分布式配置中心(加密解密功能)
這篇文章主要給大家介紹了關(guān)于Spring Cloud微服務(wù)架構(gòu)的構(gòu)建:分布式配置中心(加密解密)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2018-05-05
Java實(shí)現(xiàn)將列表數(shù)據(jù)導(dǎo)出為PDF文件并添加水印
這篇文章主要為大家詳細(xì)介紹了如何使用Java實(shí)現(xiàn)把列表數(shù)據(jù)導(dǎo)出為PDF文件,同時(shí)加上PDF水印,文中的示例代碼講解詳細(xì),需要的可以參考下2024-02-02
淺談Java序列化和反序列化為何要實(shí)現(xiàn)Serializable接口
這篇文章主要介紹了淺談Java序列化和反序列化為何要實(shí)現(xiàn)Serializable接口,序列化最重要的作用是在傳遞和保存對象時(shí).保證對象的完整性和可傳遞性,對象轉(zhuǎn)換為有序字節(jié)流,以便在網(wǎng)絡(luò)上傳輸或者保存在本地文件中,需要的朋友可以參考下2023-12-12

