Freemarker 语法

注释:包含在<#--和-->

<#local y = "test"> 定义局部变量

<#import "/lib/my_test.ftl" as my> 导入模板文件 指定名字空间 my

< #macro greet> 用户定义指令

<font size="+2">Hello Joe!</font>

< /#macro>

Ø 作为用户定义指令使用宏变量时,使用@替代FTL标记中的#

< @greet></@greet>

Ø 如果没有体内容,也可以使用:

< @greet/>

< #macro greet person>

<font size="+2">Hello ${person}!</font>

< /#macro>

Ø 可以这样使用这个宏变量:

< @greet person="Fred"/> and <@greet person="Batman"/>

输出结果是:

<font size="+2">Hello Fred!</font>

and <font size="+2">Hello Batman!</font>

用户定义指令可以有嵌套内容,使用<#nested>指令执行指令开始和结束标记之间的模板片断

Ø 例子:

< #macro border>

<table border=4 cellspacing=0 cellpadding=4><tr><td>

<#nested>

</tr></td></table>

< /#macro>

if指令

< #if animals.python.price < animals.elephant.price>

Pythons are cheaper than elephants today.

< #else>

Pythons are not cheaper than elephants today.

< /#if>

list指令

<#list animals as being>

<tr><td>${being.name}<td>${being.price} Euros

</#list>

<#list ["winter", "spring", "summer", "autumn"] as x>

${x}

</#list>

< #list ["Joe", "Fred"] + ["Julia", "Kate"] as user>

- ${user}

< /#list>

输出结果是:

- Joe

- Fred

- Julia

- Kate

include指令

<#include "/copyright_footer.html">

有一类特殊的字符串称为raw字符串,被认为是纯文本,其中的\和{等不具有特殊含义,该类字符串在引号前面加r,下面是一个例子:

${r"${foo}"}

${r"C:\foo\bar"}

输出的结果是:

${foo}

C:\foo\bar

< #assign ages = {"Joe":23, "Fred":25} + {"Joe":30, "Julia":18}>

- Joe is ${ages.Joe}

- Fred is ${ages.Fred}

- Julia is ${ages.Julia}

输出结果是:

- Joe is 30

- Fred is 25

- Julia is 18

由于Freemarker会将>解释成FTL标记的结束字符,所以对于>和>=可以使用括号来避免这种情况,例如

<#if (x > y)>

内建函数

Ø 内建函数的用法类似访问散列的子变量,只是使用“?”替代“.”,下面列出常用的一些函数

Ø 字符串使用的:

n html:对字符串进行HTML编码

n cap_first:使字符串第一个字母大写

n lower_case:将字符串转换成小写

n upper_case:将字符串转换成大写

n trim:去掉字符串前后的空白字符

Ø 序列使用的:

n size:获得序列中元素的数目

Ø 数字使用的:

n int:取得数字的整数部分(如-1.9?int的结果是-1)

Ø 例子(假设test保存字符串"Tom & Jerry"):

${test?html}

${test?upper_case?html}

输出结果是:

Tom &amp; Jerry

TOM &amp; JERRY

string格式化单个Interpolation,下面是一个例子:

< #setting number_format="currency"/>

< #assign answer=42/>

${answer}

${answer?string} <#-- the same as ${answer} -->

${answer?string.number}

${answer?string.currency}

${answer?string.percent}

输出结果是:

$42.00

$42.00

42

$42.00

4,200%

Ø 插入日期值:根据缺省格式(由#setting指令设置)将表达式结果转换成文本输出;可以使用内建函数string格式化单个Interpolation,下面是一个使用格式模式的例子:

${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')'")}

输出的结果类似下面的格式:

2003-04-08 21:24:44 Pacific Daylight Time

Tue, Apr 8, '03

Tuesday, April 08, 2003, 09:24:44 PM (PDT)

Ø 插入布尔值:根据缺省格式(由#setting指令设置)将表达式结果转换成文本输出;可以使用内建函数string格式化单个Interpolation,下面是一个例子:

< #assign foo=true/>

${foo?string("yes", "no")}

输出结果是:

yes

数字Interpolation的#{expr; format}形式可以用来格式化数字,format可以是:

Ø mX:小数部分最小X位

Ø MX:小数部分最大X位

Ø 例子:

<#-- If the language is US English the output is: -->

< #assign x=2.582/>

< #assign y=4/>

#{x; M2} <#-- 2.58 -->

#{y; M2} <#-- 4 -->

#{x; m1} <#-- 2.6 -->

#{y; m1} <#-- 4.0 -->

#{x; m1M2} <#-- 2.58 -->

#{y; m1M2} <#-- 4.0 -->

使用import指令导入库到模板中,Freemarker会为导入的库创建新的名字空间,并可以通过import指令中指定的散列变量访问库中的变量:

< #import "/lib/my_test.ftl" as my>

< #assign mail="[email protected]">

< @my.copyright date="1999-2002"/>

${my.mail}

${mail}

输出结果:

<p>Copyright (C) 1999-2002 Julia Smith. All rights reserved.

<br>Email: [email protected]</p>

[email protected]

[email protected]

相关推荐