本文重要推荐了FreeMarker模板文件有几局部构成?以及FreeMarker的一些大约语法知识.

FreeMarker模板文件并不比HTML版面容杂多少,FreeMarker模板文件重要由如下4个局部构成:

1. 文本:直接输出的局部
2. 注释:<#-- ... -->款式局部,不会输出
3. 插值:即${...}或#{...}款式的局部,将利用数据模型中的局部轮换输出
4. FTL号召:FreeMarker指定,和HTML符号相仿,名字前加#授予判别,不会输出

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

<html><br>
 <head><br>
 <title>Welcome!</title><br>
 </head><br>
 <body><br>
 <#-- 注释局部--><br>
 <#-- 下面利用插值 -->
 <h1>Welcome ${user}!</h1><br>
 <p>We have theseanimals:<br>
 <u1><br>
 <#-- 利用FTL号召 -->
 <#list animals asbeing><br>
 <li>${being.name} for ${being.price}Euros<br>
 <#list><br>
 <u1><br>
 </body><br>
 </html>

1. FTL号召法定

在FreeMarker中,利用FTL标签来利用号召,FreeMarker有3种FTL标签,这和HTML标签是全面相仿的.
1,开始标签:<#directivenameparameter>
2,告终标签:</#directivename>
3,空标签:<#directivename parameter/>

切实上,利用标签时前面的符号#也可能变成@,万一该号召是一个用户号召而不是系统内建号召时,应将#符号改成@符号.
利用FTL标签时,该当有准确的嵌套,而不是穿插利用,这和XML标签的用法全面一样.万一全用不存在的号召,FreeMarker不会利用模板输出,而是发生一个讹谬消息.FreeMarker会疏忽FTL标签中的空别字符.划算当心的是<, /> 和号召之间不批准有空别字符.

2.插值法定

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

2.1 通用插值

对于通用插值,又能够分为以下4种情形:
1,插值收获为字符串值:直接输出表白式收获
2,插值收获为数字值:依据默认款式(由#setting号召设置)将表白式收获转换成文本输出.能够利用内建的字符串函数款式化个体插值,gucci香水如下面的例子:

<#settionnumber_format="currency"/>
 <#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("yyyy-MM-dd HH:mm:ss zzzz")}
 ${lastUpdated?string("EEE, MMM d, ''yy")}
 ${lastUpdated?string("EEEE, MMMM dd, yyyy, hh:mm:ss a'('zzz')'")}


输出收获是:

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", "no")}


输出收获是:
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://盘"}
${'我名字是/"annlee/"'}
输出收获是:
我的文件保留在C:/盘
我名字是"annlee"

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"${foo}"}
 ${r"C:/foo/bar"}


输出收获是:

${foo}
 C:/foo/bar

2,数值
表白式中的数值直接输出,无须要引号.小数点利用"."分隔,不能利用分组","符号.FreeMarker现在还不扶持科学计数法,因而"1E3"是讹谬的.在FreeMarker表白式中利用数值必需当心以下几点:
1,数值不能省略小数点前面的0,因而".5"是讹谬的写法
2,数值8 , +8 , 8.00都是雷同的

3,布尔值
直接利用true和false,不利用引号.

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

<#list ["礼拜一", "礼拜二", "礼拜三", "礼拜四", "礼拜五", "礼拜六","礼拜天"] as x>
 ${x}
 </#list>


输出收获是:

礼拜一
 礼拜二
 礼拜三
 礼拜四
 礼拜五
 礼拜六
 礼拜天

除此之外,聚集元素也能够是表白式,例子如下:

[2 + 2, [1, 2, 3, 4], "whatnot"]

还能够利用数字范围定义数字聚集,如2..5雷同于[2, 3, 4,5],然而更管用率.当心,利用数字范围来定义聚集时无需利用方括号,数字范围也扶持反递增的数字范围,如5..2

5,Map对象


Map对象利用花括号包括,Map中的key-value对之间以英文冒号":"分隔,多组key-value对之间以英文逗号","分隔.下面是一个例子:


Map对象的key和value都是表白式,然而key定然是字符串因而两者的联系是互补的,而非竞争的。

{"语文":78, "数学":80}