什麼是 FreeMarker?
FreeMarker 是一款 模板引擎: 即一種基於模板和要改變的數據, 並用來生成輸出文本(HTML網頁,電子郵件,配置文件,源代碼等)的通用工具。 它不是面向最終用戶的,而是一個Java類庫,是一款程序員可以嵌入他們所開發產品的組件。
模板編寫爲FreeMarker Template Language (FTL)。它是簡單的,專用的語言, 不是 像PHP那樣成熟的編程語言。 那就意味着要準備數據在真實編程語言中來顯示,比如數據庫查詢和業務運算, 之後模板顯示已經準備好的數據。在模板中,你可以專注於如何展現數據, 而在模板之外可以專注於要展示什麼數據。
定義變量
<#assign name1=value1 name2=value2 ... nameN=valueN>
或<#assign same as above... in namespacehash>
或<#assign name> capture this </#assign>
或<#assign name in namespacehash> capture this </#assign>
include 標籤引入其他文件模板文件
<#include "/copyright_footer.html">
if elseif else 標籤使用
<#if condition>
</#if>
<#if animals.python.price < animals.elephant.price>
Pythons are cheaper than elephants today.
<#elseif animals.elephant.price < animals.python.price>
Elephants are cheaper than pythons today.
<#else>
Elephants and pythons cost the same today.
</#if>
list標籤遍歷數組
<ul>
<#list misc.fruits as fruit>
<li>${fruit}
</#list>
</ul>
以上遍歷在數組爲空的情況下,會生成<ul></ul>標籤。再有些情況下,我們希望避免此類情況。我們可以這樣遍歷數組,如下代碼:
<#list misc.fruits>
<ul>
<#items as fruit>
<li>${fruit}
</#items>
</ul>
</#list>
如果我們想要輸出<p>Fruits: orange, banana類型格式數據
那麼我們該如何遍歷數組呢?強大的freemarker也提供了支持,請看如下代碼:
<p>Fruits: <#list misc.fruits as fruit>${fruit}<#sep>, </#list>
注意:<#sep>, </#sep>,只有當集合List還有下一個元素時,標籤語言纔會被執行,保證最後一個沒有,。
如果集合爲空時,會輸出<p>Fruits:,此時是我們不想要的結果,list標籤還有類似if標籤的功能,也可以使用else標籤。
<p>Fruits: <#list misc.fruits as fruit>${fruit}<#sep>, <#else>None</#list>
實現類似的功能我們還可以這樣寫:
<p>Fruits: ${fruits?join(", ", "None")}
就是如此簡單。
最後我們可以綜合使用以上標籤:list
, items
, sep
, else
<#list misc.fruits>
<p>Fruits:
<ul>
<#items as fruit>
<li>${fruit}<#sep> and</#sep>
</#items>
</ul>
<#else>
<p>We have no fruits.
</#list>
處理null值,或者誤輸入不存在的數據模型model,設置默認值,我們該如何處理呢?用!。
<h1>Welcome ${user!"visitor"}!</h1>
如果我們想判斷這個變量是否丟失或者不存在的情況。我們可以在這個變量後面添加雙問號??,譬如如下:
<#if user??><h1>Welcome ${user}!</h1></#if>
字符串內置函數:
英文文檔參考:https://freemarker.apache.org/docs/ref_builtins_string.html
中文文檔參考:http://freemarker.foofun.cn/ref_builtins_string.html
以上是我工作常用的標籤指令。
詳細更多可以參考中文官網:http://freemarker.foofun.cn/index.html,