Freemarker基础

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字符使用&形式替换.例如:&lt;

cap_first:字符串的第一个字母变为大写形式

lower_case:字符串的小写形式

upper_case:字符串的大写形式

trim:去掉字符串首尾的空格

2.序列使用的内建函数:

size:序列中元素的个数

3.数字使用的内建函数:

int:数字的整数部分(好比-1.9?int就是-1)