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)