FreeMark是一套模板引擎,也就是一套用過提供==數據模型==和==HTML模板==生成動態頁面的通用工具。html
--requestjava
--template + Freemark-dataService程序員
--HTML服務器
--response函數
既Freemark經過提供的==模板==+==數據模型==動態生成HTML界面返回給用戶的一套引擎工具。他會在WEB服務器
響應response
用戶請求request
的時候經過部署在WEB服務器上的模板動態的生成不一樣的界面返回。這裏的數據模型經常是java對象。工具
Freemark有一套本身的基礎語法(大致上和HTML類似),經過基礎語法能夠迅速的生成不一樣的界面。ui
在平常的開發中只要掌握簡易的Freemark語法加上一點HTML基礎就能迅速的入手開發。code
${......}:FreeMarker將會輸出真實的值來替換大括號內的表達式,這樣的表達式被稱爲interpolation(插值).htm
註解:註釋和HTML的註釋也很類似,可是它們使用<#-- and -->來標識。不像HTML註釋那樣,FTL註釋不會出如今輸出中(不出如今訪問者的頁面中),由於FreeMarker會跳過它們。對象
FTL標籤:FreeMarker模板的語言標籤。FTL標籤和HTML標籤有一些類似之處,可是它們是FreeMarker的指令,是不會在輸出中打印的。這些標籤的名字以==#==開頭。
(用戶自定義的FTL標籤則須要使用@來代替#)
給出幾個經常使用的指令,其他指令在開發須要時查詢便可
<#if condition>... <#elseif condition2>... <#elseif condition3>... <#else>... </#if>
<#include>... </#include>
<#import "/lib/common.ftl" as com>
<#switch value> <#case refValue>...<#break> <#case refValue>...<#break> <#default>... </#switch>
<#list>... </#list>
就像是java中方法同樣,內建函數一般爲咱們開發WEB程序提供便利。它們並非數據模型中的東西,是FreeMarker在數值上添加的。爲了清晰子變量是哪部分,==使用?代替==,.(點)來訪問它們。
[x] html 若是在 <#list animals as animal> ... </#list> animal?index給出了在animals中基於0開始的animal的索引值 animal?counter也像index,可是給出的是基於1的索引值 animal?item_parity基於當前計數的奇偶性,給出字符串「odd」或「even」。在給不一樣行着色時很是有用,好比: <td class="${animal?item_parity}Row">
內建函數多種多樣,並不一一列舉,只舉出幾個經常使用的
cap_first:使字符串第一個字母大寫
lower_case:將字符串轉換成小寫
upper_case:將字符串轉換成大寫
trim:去掉字符串先後的空白字符
exists:判斷對象是否是null
也能夠直接${mouse?if_exists})
${openingTime?date} ${openingTime?date_time} ${openingTime?time}
輸出布爾形 經常使用格式化日期 openingTime必須是Date型,詳細查看freemarker文檔 Reference->build-in referece->build-in for date
其他開發用到的時候在去查詢便可,值得一提的是== 空值 ==
數據模型中常常會有可選的變量(有時並不存在)。除了一些人爲緣由致使失誤外,FreeMarker不能引用不存在的變量,除非明確地告訴它當變量不存在時如何處理,以下兩種典型的處理方法:
<h1>Welcome ${user!"visitor"}!</h1>
這個例子,當user不存在於數據模型時,模板將會將user的值表示爲字符串 「visitor」。(當 user 存在時,模板就會表現出 ${user} 的值)
! 空值的語法:
第一種用法不給缺失的變量指定默認值,代表默認值是空字符串,長度爲0的集合,或者長度爲0的Map對象.