FreeMarker基础教程 联系客服

发布时间 : 星期四 文章FreeMarker基础教程更新完毕开始阅读530b659bd4d8d15abe234e20

FreeMarker基础教程

FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主要由如下4个部分组成:

1. 文本:直接输出的部分

2. 注释:<#-- ... -->格式部分,不会输出

3. 插值:即${...}或#{...}格式的部分,将使用数据模型中的部分替代输出 4. FTL指令:FreeMarker指定,和HTML标记类似,名字前加#予以区分,不会输

下面是一个FreeMarker模板的例子,包含了以上所说的4个部分

Welcome!

<#-- 注释部分 -->

<#-- 下面使用插值 -->

Welcome ${user} !

We have these animals:

<#-- 使用FTL指令 --> <#list animals as being>

  • ${being.name} for ${being.price} Euros
    <#list>

    1 FTL指令规则

    在FreeMarker中,使用FTL标签来使用指令,FreeMarker有3种FTL标签,这和HTML标签是完全类似的.

    1,开始标签:<#directivename parameter> 2,结束标签:

    3,空标签:<#directivename parameter/>

    实际上,使用标签时前面的符号#也可能变成@,如果该指令是一个用户指令而不是系统内建指令时,应将#符号改成@符号.

    使用FTL标签时, 应该有正确的嵌套,而不是交叉使用,这和XML标签的用法完全一样.如果全用不存在的指令,FreeMarker不会使用模板输出,而是产生一个错

    误消息.FreeMarker会忽略FTL标签中的空白字符.值得注意的是< , /> 和指令之间不允许有空白字符.

    2 插值规则

    FreeMarker的插值有如下两种类型:1,通用插值${expr};2,数字格式化插值:#{expr}或#{expr;format}

    2.1 通用插值

    对于通用插值,又可以分为以下4种情况: 1,插值结果为字符串值:直接输出表达式结果

    2,插值结果为数字值:根据默认格式(由#setting指令设置)将表达式结果转换成文本输出.可以使用内建的字符串函数格式化单个插值,如下面的例子: <#settion number_format=\<#assign answer=42/> ${answer}

    ${answer?string} <#-- the same as ${answer} --> ${answer?string.number} ${answer?string.currency} ${answer?string.percent} ${answer} 输出结果是: $42.00 $42.00 42

    $42.00 4,200%

    3,插值结果为日期值:根据默认格式(由#setting指令设置)将表达式结果转换成文本输出.可以使用内建的字符串函数格式化单个插值,如下面的例子: ${lastUpdated?string(\${lastUpdated?string(\

    ${lastUpdated?string(\输出结果是:

    2008-04-08 08:08:08 Pacific Daylight Time Tue, Apr 8, '03

    Tuesday, April 08, 2003, 08:08:08 PM (PDT)

    4,插值结果为布尔值:根据默认格式(由#setting指令设置)将表达式结果转换成文本输出.可以使用内建的字符串函数格式化单个插值,如下面的例子:

    <#assign foo=true/>

    ${foo?string(\输出结果是: yes

    2.2 数字格式化插值

    数字格式化插值可采用#{expr;format}形式来格式化数字,其中format可以是: mX:小数部分最小X位 MX:小数部分最大X位 如下面的例子:

    <#assign x=2.582/> <#assign y=4/>

    #{x; M2} <#-- 输出2.58 --> #{y; M2} <#-- 输出4 --> #{x; m2} <#-- 输出2.6 --> #{y; m2} <#-- 输出4.0 --> #{x; m1M2} <#-- 输出2.58 --> #{x; m1M2} <#-- 输出4.0 -->

    3 表达式

    表达式是FreeMarker模板的核心功能,表达式放置在插值语法${}之中时,表明需要输出表达式的值;表达式语法也可与FreeMarker 标签结合,用于控制输出.实际上FreeMarker的表达式功能非常强大,它不仅支持直接指定值,输出变量值,也支持字符串格式化输出和集合访问等功能.

    3.1 直接指定值

    使用直接指定值语法让FreeMarker直接输出插值中的值,而不是输出变量值.直接指定值可以是字符串,数值,布尔值,集合和MAP对象.

    1,字符串

    直接指定字符串值使用单引号或双引号限定,如果字符串值中包含特殊字符需要转义,看下面的例子:

    ${\我的文件保存在C:\\\\盘\

    ${'我名字是\\\输出结果是:

    我的文件保存在C:\\盘 我名字是\

    FreeMarker支持如下转义字符: \\\双引号(u0022) \\';单引号(u0027) \\\\;反斜杠(u005C) \\n;换行(u000A) \\r;回车(u000D) \\t;Tab(u0009) \\b;退格键(u0008) \\f;Form feed(u000C) \\l;< \\g;> \\a;& \\{;{

    \\xCode;直接通过4位的16进制数来指定Unicode码,输出该unicode码对应的字符.

    如果某段文本中包含大量的特殊符号,FreeMarker提供了另一种特殊格式:可以在指定字符串内容的引号前增加r标记,在r标记后的文件将会直接输出.看如下代码:

    ${r\${r\输出结果是: ${foo} C:\\foo\\bar

    2,数值

    表达式中的数值直接输出,不需要引号.小数点使用\分隔,不能使用分组\符号.FreeMarker目前还不支持科学计数法,所以\是错误的.在FreeMarker表达式中使用数值需要注意以下几点:

    1,数值不能省略小数点前面的0,所以\是错误的写法 2,数值8 , +8 , 8.00都是相同的

    3,布尔值

    直接使用true和false,不使用引号.

    4,集合

    集合以方括号包括,各集合元素之间以英文逗号\分隔,看如下的例子:

    <#list [\星期一\星期二\星期三\星期四\星期五\星期六\星期天\