1 什么是FreeMarker?
官方解釋:FreeMarker 是一款模板引擎, 即一種基於模板和要改變的數據, 並用來生成輸出文本(HTML網頁,電子郵件,配置文件,源代碼等)的通用工具。
其實FreeMarker的原理就是:模板+數據模型=輸出
模板編寫為FreeMarker Template Language (FTL),渲染前台界面后需要更改名為 xxx.ftl,同理xxx.jsp
特點:
輕量級模版引擎,不需要servlet,web容器
其次freemarker是java寫的,很多語法很java是有密切聯系的
2 FreeMarker測試環境搭建
直接使用IDEA 選擇springboot 構建集成環境,勾選上web和freemarker
如果沒有選擇這這種方法的,在maven里面加入或者引入Jar即可
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
用例測試
// 實體類
public class User {
private Integer id;
private String name;
private String email;
// ...getter and setter
}
// Controller類,存儲值並跳轉到index.htl界面
@Controller
@RequestMapping(value = "/index")
public class IndexController {
@RequestMapping(value = "/login")
public ModelAndView index(ModelAndView modelAndView) {
List<User> userList=new ArrayList<User>();
userList.add(new User(1,"augus","augu@163.com"));
userList.add(new User(2,"aili","aili@163.com"));
userList.add(new User(3,"beleng","beleng@163.com"));
modelAndView.addObject("userList", userList);
modelAndView.setViewName("index");
return modelAndView;
}
}
<!-- 前台-->
<!DOCTYPE html>
<html>
<body>
<table border="1">
<tr>
<th>name</th>
<th>email</th>
</tr>
<!-- 遍歷輸出-->
<#list userList as user>
<tr>
<th>${user.name}</th>
<th>${user.email}</th>
</tr>
</#list>
</table>
</body>
<html>
測試結果
后台存儲的3個用戶,顯示在前台界面上
3 FreeMarker 知識點
構成
模板由文本+插值+FTL標簽+注釋組成
- 文本:HTML原來的內容
- 插值:${}代表的就是插值,一般來說就是后台傳過來的值顯示在前台用${}表示
- FTL標簽:比如<#list></#list> 不會顯示在界面上,和html標簽類似
- 注釋:<#-- 注釋 -->
謹記一點,就是插值只能放在文本中,不能放在FTL標簽中,不然渲染模板的時候會報錯
正確的示范
<h2>${user.name}</h2>
錯誤的示范
<#if ${user.name} == "augus"></#if>
在FTL標簽中,直接user.name 即可,不用插值
語法
定義變量
<#assign var = value > 定義變量並初始化
<!--定義字符串-->
<#assign str = "hello world" >
<!--定義字數值-->
<#assign num = 13.2 >
<!--定義布爾-->
<#assign flag = true >
<!--定義數組-->
<#assign arr = ["foo", "boo", "get"]/>
<!--定義map-->
<#assign uMap={"name":"augus", "email":"augus@163.com"}>
if標簽 判斷
規范:<#if condition><#elseif condition><#else></#if>
比較運算符:x == y (等於) ,x!=y(不等於) ,x lt y(小於), x lte y(小於等於), x gt y(大於), x gte y (大於等於)
<!--定義數值num-->
<#assign num = 13.2 >
<#if num gt 16>
<p>num大於16</p>
<#elseif num lt 12>
<p>num大於16</p>
<#else>
<p>num在12~16的范圍中</p>
</#if>
輸出:
num在12~16的范圍中
list標簽 循環
規范:<#list hash_or_seq as var></#list>
<!--定義數組-->
<#assign arrs = ["foo", "boo", "get"]/>
<!--循環-->
<#list arr as arr>
${arr},
</#list>
輸出:
foo, boo, get,
! 的空值操作
freemarker 針對防止null有特定的操作符
<p>${"name:"+name!}<p/>
<p>${(maxNumber!)+1}</p>
輸出:
name:
1
在頁面中並未存在 name和maxNumber的,通過加 ! 可以處理null值的存在,如果上述例子不加 !操作符,模板加載時會報錯 “The following has evaluated to null or missing:”
自定義函數和指令
可以在模板中使用function作為自定義函數,類似於js自定義funciton,在必要的時候直接調用即可
函數規范:<#function name param1 param2 ... paramN>
<!-- 函數測試 -->
<!-- 定義函數 -->
<#function sum num1 num2>
<#return num1 + num2>
</#function>
<!-- 調用函數-->
${sumInt(5, 7)}
輸出:
12
在模板中存在多個相同的操作的時候,可以自定義指令,進行重復的操作
指令規范:<#macro name param1 param2 ... paramN></#macro>
<!-- 指令測試 -->
<#macro prInfo name email>
<p>姓名:${name}</p>
<p>郵箱:${email}</p>
</#macro>
<!--調用自定 @操作符-->
<@prInfo "張三" "287159@qq.com"/>
<!-- 前台會將指令區域的值替換后輸出HTML-->
輸出:
姓名:張三
郵箱:287159@qq.com
4 結束
以上內容基本都是FreeMarker的常用知識點,我基本上是參考中文在線手冊學習的,這里的FreeMarker知識點都是模板開發,並未涉及到程序開發,如有未涉及的知識點,可以參考FreeMarker中文在線手冊,如果有心學習的話,基本上一天之內就可以將FreeMarker學習完
莫失精誠赤子心