FreeMarker — 模板開發


1 什么是FreeMarker?

官方解釋:FreeMarker 是一款模板引擎, 即一種基於模板和要改變的數據, 並用來生成輸出文本(HTML網頁,電子郵件,配置文件,源代碼等)的通用工具。

其實FreeMarker的原理就是:模板+數據模型=輸出

image

模板編寫為FreeMarker Template Language (FTL),渲染前台界面后需要更改名為 xxx.ftl,同理xxx.jsp

特點:
輕量級模版引擎,不需要servlet,web容器
其次freemarker是java寫的,很多語法很java是有密切聯系的

2 FreeMarker測試環境搭建

直接使用IDEA 選擇springboot 構建集成環境,勾選上web和freemarker

image

如果沒有選擇這這種方法的,在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個用戶,顯示在前台界面上

image

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學習完

FreeMarker中文手冊地址

莫失精誠赤子心

原文出處: https://www.cnblogs.com/augusduan/p/9271516.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM