1.FreeMarker的定義
FreeMarker是一個基於java的免費開源的模板引擎,基於文本的模板輸出工具,有着豐富的表達式,還可以自定義表達式。
Freemarker可以將後端準備好的數據,通過Freemarker表達式在前端頁面展示出來。
在軟件項目中常常用來生成HTML的 Web頁面,可以基於模板生成輸出文件,導出複雜樣式的excel。
2.工作原理圖
3.springboot工程中配置
1.添加maven依賴
<!-- freemarker -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
- 在springboot項目中的yml配置
spring:
freemarker:
cache: false
suffix: .ftl
template-loader-path: classpath:/templates
content-type: text/html; charset=utf-8
settings:
number_format: 0 #數字不進行千分位自動轉換,比較大的數字會帶有逗號,如1,000
4.常用方法
在說方法前,先說一下Freemarker比較噁心的地方,就是空錯誤,如果你頁面表達式是null,
就會報錯,所以在使用的時候要先判斷是否爲空。有時候頁面報錯就是因爲這個。
1.$獲取元素值
<#if (msg)!="">
${msg}
</#if>
2.獲取map中的值
${map["name"]}
3.foreach,循環輸出list,先判斷是否
<#if students ?? && students ?size gt 0>
<#list students as student>
${student.name}
${student.age}
${student.sex}
</#list>
</#if>
4.邏輯判斷,if…else方法,
字符串類型判斷
<#if type == 1>
type=1
<#elseif type == 2>
type=2
</#if>
布爾值類型判斷
<#if (booleanVal?string('yes', 'no'))=='yes'>
<span> 對 </span>
<#else>
<span> 錯 </span>
</#if>
多個值進行if判斷
<#if flag=="1">
<span> 1 </span>
<#elseif flag=="2">
<span> 2 </span>
<#elseif flag=="3">
<span> 3 </span>
<#else>
<span> 除了1、2、3之外 </span>
</#if>
5.獲取session中的值,如後端在session中保存userId,使用Freemarker
在session中保存userId的值
request.getSession().setAttribute("userId",userId);
在頁面使用freemarker表達式,爲避免userId的值是空就會報錯,所以要先判斷一下
<#if Session["userId"]?exists>
${Session["userId"]}
</#if>
6.Freemarker格式化時間
// 輸出時間格式 2020-05-09 13:59:32
${createTime?string('yyyy-MM-dd hh:mm:ss')}
7.使用include標籤,引入其他頁面
抽出公共頁面代碼,取名right.ftl,如下
<div style="height: 80px;position: fixed;width: 350px;text-align: center;background-color: white;">
<div class="col-md-6">
<a href="#" style="text-decoration: none;color: #000000;line-height: 80px;font-size: 22px;">
<span class="glyphicon glyphicon-edit"></span>
寫文章</a>
</div>
<div class="col-md-6">
<a href="#" style="text-decoration: none;color: #000000;line-height: 80px;font-size: 22px;">
<span class="glyphicon glyphicon-trash"></span>
草稿箱</a>
</div>
</div>
在需要引入該代碼的頁面中,使用include標籤
<#include "right.ftl">