Spring Boot FreeMarker 使用教程(if, else, elseif,list)
阿新 • • 發佈:2021-02-01
技術標籤:spring bootjavaspringspring bootfreemarker
1 FreeMarker 簡介(中文官網地址http://freemarker.foofun.cn/index.html)
FreeMarker 是一款 模板引擎: 即一種基於模板和要改變的資料, 並用來生成輸出文字(HTML網頁,電子郵件,配置檔案,原始碼等)的通用工具。 它不是面向終端使用者的,而是一個Java類庫,是一款程式設計師可以嵌入他們所開發產品的元件。
模板編寫為FreeMarker Template Language (FTL)。它是簡單的,專用的語言, 不是 像PHP那樣成熟的程式語言。 那就意味著要準備資料在真實程式語言中來顯示,比如資料庫查詢和業務運算, 之後模板顯示已經準備好的資料。在模板中,你可以專注於如何展現資料, 而在模板之外可以專注於要展示什麼資料。
這種方式通常被稱為 MVC (模型 檢視 控制器) 模式,對於動態網頁來說,是一種特別流行的模式。 它幫助從開發人員(Java 程式設計師)中分離出網頁設計師(HTML設計師)。設計師無需面對模板中的複雜邏輯, 在沒有程式設計師來修改或重新編譯程式碼時,也可以修改頁面的樣式。
而FreeMarker最初的設計,是被用來在MVC模式的Web開發框架中生成HTML頁面的,它沒有被繫結到 Servlet或HTML或任意Web相關的東西上。它也可以用於非Web應用環境中。
FreeMarker 是 免費的, 基於Apache許可證2.0版本釋出。
2.2 編輯 Pom.xml 引入依賴
環境:springboot 2.2.0.RELEASE
<!-- freemarker 配置 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
注意 :Spring Boot 中預設不需要做任何配置。
2.3 編寫最簡單的示例程式碼
IndexController.java
/**
* 在是一個普通的 Controller 類
* */
@Controller
public class IndexController {
/**
* 路由 /index
* 返回 index 這裡預設配置自動對映到 templages/index
* */
@RequestMapping("/index")
public String index(Model model){
model.addAttribute("welcome","hello fishpro");
return "index";
}
}
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
this is welcome ${welcome}
</body>
</html>
2.4 執行示例
在瀏覽器中輸入 http://ip:埠/index 顯示為,hello fishpro 就是後臺輸出的 model 物件
this is welcome hello fishpro
2.5 複雜的指令示例
2.5.1 if, else, elseif
<#if condition>
...
<#elseif condition2>
...
<#elseif condition3>
...
...
<#else>
...
</#if>
<#if x == 1>
x is 1
<#elseif x == 2>
x is 2
<#elseif x == 3>
x is 3
<#elseif x == 4>
x is 4
<#else>
x is not 1 nor 2 nor 3 nor 4
</#if>
2.5.1 list<實體類>型別遍歷 並根據實體類中的某個屬性排序
<#list formattributes?sort_by("queryorder") as formattribute>
<#if formattribute.isqueryfield == 1>
<#if formattribute.formuitype == "文字">
<#if (formattribute.ispkfield)??>//判斷是否為空
...
<#else>
...
</#if>
<#elseif formattribute.formuitype == "下拉">
...
<#elseif formattribute.formuitype == "時間">
//或者|| 並且&& !非
<#if formattribute.fieldtype == "DATETIME" || formattribute.fieldtype == "DATE">
field_${formattribute.vueLabel}: null,
</#if>
</#if>
</#if>
</#list>
2.5.2 Map<String, List<Map<String, Object>>>格式遍歷
<#list map?keys as key>
<#assign item = map[key]>
<#list item as itemMap>
{
<#list itemMap?keys as cateKey>
<#if cateKey="value">
value: '${itemMap[cateKey]}',
</#if>
<#if cateKey="label">
label: '${itemMap[cateKey]}'
</#if>
</#list>
},
</#list>
</#list>
2.5.3 Map<String, List>格式遍歷
<#list gourpLinkedMap?keys as key>
<#assign linkedMapList = gourpLinkedMap[key]>
<#list linkedMapList as linked>
<#if !treeNodeStr?seq_contains(linked) >
change${linked}(){
<#list linkedMapList as linked2>
<#if linked2?index gt linked?index>
this.editTreeDate.${linked2} = ''
</#if>
<#if linked2?index == linked?index+1>
this.get${linked2}List()
</#if>
</#list>
},
</#if>
</#list>
</#list>