Freemarker思想: 模型+數據=輸出html
1.建立Freemarker配置(Configuration)對象,設置配置信息(例如:設置模板加載路徑)函數
2.構造數據模型 注:Freemarker中的rootmodel數據模型是Map類型,rootmodel中能夠再存聽任何其它類型數據spa
3.構造一個數據輸出流對象,用於獲取 模板+數據 的輸出信息.net
4.經過Configuration對象獲取已經預加載的模板對象scala
5.數據模型與模板對象進行關聯(使用模型對象的process --處理 方法)orm
6.經過輸出對象輸出數據htm
數據模型類型:對象
TemplateModel接口
extends字符串
標量(scalar)類型
TemplateScalarModel TemplateBooleanModel TemplateDateModelTemplateNumberModel
標量實現類
SimpleScalarSimpleDate SimpleNumber
容器類型(能夠包含其它數據類型)
TemplateHashModel TemplateSequenceModel TemplateCollectionModel
容器實現類
SimpleHash SimpleSequenceSimpleCollection
方法變量
經過實現方法變量接口能夠實現自定義方法,從而在FreeMarker模板中使用自定義方法
TemplateMethodModel
extends
TemplateMethodEx
轉換器變量
TemplateTransformModel
經常使用指令:
<#if user.name=="Tom" > ... </#if>
<#list userList as user > ${user.name}... </#list>
<#include "/aaa.html"/> <#--引入aaa.html頁面-->
${user!"Tom"} <#--當user不存在(爲null)時將用"Tom"字符串代替,就是指定一個默認值-->
<#if user??>...</#if> <#--??用於判斷一個變量是否存在-->
<#macro macro_name [param1_name[=v1] param2_name[=v2]]> name: ${param1_name} ,age: ${param2_name}... </#macro> <#--定義宏(macro)-->
<@macro_name [param1_name=v1 param2_name=v2 ... ]/> <#--使用宏(macro)-->
<#assign var_name=value/> <#--模板中定義一個名爲var_name的變量-->
${var_name} <#--調用一個名爲var_name的變量-->
<#include "路徑"/> <#--會在主命名空間中建立被引入模板中定義的變量-->
<#import "路徑" as alias/> <#--會在建立一個與被引入模板對應的命名空間,在對應的命名空間中建立被引入模板中定義的變量, 所以不可以在主命名空間中直接使用引入模板中定義的變量,須要使用其alias調用.例如:${alias.var_1}-->
<@alias.macro_1 [param1_name=v1 param2_name=v2 ... ]/> <#--在主命名空間中調用被引入的模板中定義的宏-->
注意:指令與插值中支持算數運算
模板組成:
1.文本
2.FTL tags標籤 如:<@print ... >...</@print>,<#if ../>...</#if>等
3.Interpolation 插值: 這部分的輸出會被計算的值來替換。插值由${和}所分隔(或者#{和},這種風格已經不建議再使用了)。
4.Comments註釋: <#-- ... -->
注意:FTL標籤名,插值${...}區分大小寫
內建函數:
使用 "變量?函數名" 的形式調用
1.用於字符處理的內建函數:
html:將字符串中全部特殊的HTML字符使用&形式替換.例如:<
cap_first:字符串的第一個字母變爲大寫形式
lower_case:字符串的小寫形式
upper_case:字符串的大寫形式
trim:去掉字符串首尾的空格
2.序列使用的內建函數:
size:序列中元素的個數
3.數字使用的內建函數:
int:數字的整數部分(好比-1.9?int就是-1)