freemarker中文手册 下载本文

${r\${r\输出的结果是: ${foo} C:\\foo\\bar ? 数字 ? 直接输入,不需要引号

? 精度数字使用“.”分隔,不能使用分组符号

? 目前版本不支持科学计数法,所以“1E3”是错误的 ? 不能省略小数点前面的0,所以“.5”是错误的 ? 数字8、+8、08和8.00都是相同的 ? 布尔值

? true和false,不使用引号 ? 序列

? 由逗号分隔的子变量列表,由方括号限定,下面是一个例子:

<#list [\ as x> ${x} 输出的结果是: winter spring summer autumn ? 列表的项目是表达式,所以可以有下面的例子: [2 + 2, [1, 2, 3, 4], \? 可以使用数字范围定义数字序列,例如2..5等同于[2, 3, 4, 5],但是更有效率,注意数字范围没有方括号 ? 可以定义反递增的数字范围,如5..2 ? 散列(hash)

? 由逗号分隔的键/值列表,由大括号限定,键和值之间用冒号分隔,下

面是一个例子:

{\? 键和值都是表达式,但是键必须是字符串 ? 获取变量

? 顶层变量: ${variable},变量名只能是字母、数字、下划线、$、@和#的

组合,且不能以数字开头 ? 从散列中获取数据

? 可以使用点语法或方括号语法,假设有下面的数据模型:

(root) | +- book | | | +- title = \ | | | +- author | | | +- name = \ | | | +- info = \ | +- test = \下面都是等价的: book.author.name book[\book.author.[\book[\? 使用点语法,变量名字有顶层变量一样的限制,但方括号语法没有该限制,因为名字是任意表达式的结果 ? 从序列获得数据:和散列的方括号语法语法一样,只是方括号中的表达式值必须是数字;注意:第一个项目的索引是0

? 序列片断:使用[startIndex..endIndex]语法,从序列中获得序列片断(也

是序列);startIndex和endIndex是结果为数字的表达式 ? 特殊变量:FreeMarker内定义变量,使用.variablename语法访问

? 字符串操作

? Interpolation(或连接操作)

? 可以使用${..}(或#{..})在文本部分插入表达式的值,例如:

${\${\? 可以使用+操作符获得同样的结果 ${\${user + user + user + user} ? ${..}只能用于文本部分,下面的代码是错误的:

<#if ${isBig}>Wow! <#if \应该写成:

<#if isBig>Wow! ? 子串

? 例子(假设user的值为“Big Joe”):

${user[0]}${user[4]} ${user[1..4]} 结果是(注意第一个字符的索引是0):

BJ ig J ? 序列操作

? 连接操作:和字符串一样,使用+,下面是一个例子:

<#list [\- ${user} 输出结果是:

- Joe - Fred - Julia - Kate ? 散列操作 ? 连接操作:和字符串一样,使用+,如果具有相同的key,右边的值替代左边的值,例如:

<#assign ages = {\, \\, \- Joe is ${ages.Joe} - Fred is ${ages.Fred} - Julia is ${ages.Julia} 输出结果是:

- Joe is 30 - Fred is 25 - Julia is 18 ? 算术运算

? +、-、×、/、%,下面是一个例子:

${x * x - 100} ${x / 2} ${12 % 10} 输出结果是(假设x为5):

-75 2.5 2 ? 操作符两边必须是数字,因此下面的代码是错误的: ${3 * \? 使用+操作符时,如果一边是数字,一边是字符串,就会自动将数字转换为字符串,例如:

${3 + \输出结果是:

35 ? 使用内建的int(后面讲述)获得整数部分,例如:

${(x/2)?int} ${1.1?int} ${1.999?int} ${-1.1?int} ${-1.999?int} 输出结果是(假设x为5):

2 1 1 -1 -1 ? 比较操作符 ? 使用=(或==,完全相等)测试两个值是否相等,使用!= 测试两个值是否不相等 ? =和!=两边必须是相同类型的值,否则会产生错误,例如<#if 1 = \会引起错误 ? Freemarker是精确比较,所以对\、\和\是不相等的 ? 对数字和日期可以使用<、<=、>和>=,但不能用于字符串

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

这种情况,例如<#if (x > y)>

? 另一种替代的方法是,使用lt、lte、gt和gte来替代<、<=、>和>=