1. 程式人生 > 其它 >Spring Boot FreeMarker 使用教程(if, else, elseif,list)

Spring Boot FreeMarker 使用教程(if, else, elseif,list)

技術標籤: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>