? 逻辑操作符
? &&(and)、||(or)、!(not),只能用于布尔值,否则会产生错误 ? 例子:
<#if x < 12 && color = \ We have less than 12 things, and they are green. #if> <#if !hot> <#-- here hot must be a boolean --> It's not hot. #if> ? 内建函数
? 内建函数的用法类似访问散列的子变量,只是使用“?”替代“.”,下面列出常用的一
些函数
? 字符串使用的:
? html:对字符串进行HTML编码 ? cap_first:使字符串第一个字母大写 ? lower_case:将字符串转换成小写 ? upper_case:将字符串转换成大写 ? trim:去掉字符串前后的空白字符 ? 序列使用的:
? size:获得序列中元素的数目 ? 数字使用的:
? int:取得数字的整数部分(如-1.9?int的结果是-1) ? 例子(假设test保存字符串\):
${test?html} ${test?upper_case?html} 输出结果是:
Tom & Jerry TOM & JERRY ? 操作符优先顺序
操作符组 操作符 后缀 一元 内建 乘法 加法 关系
[subvarName] [subStringRange] . (methodParams) +expr、-expr、! ?
*、 / 、% +、-
<、>、<=、>=(lt、lte、gt、gte)
相等 ==(=)、!=
逻辑and && 逻辑or
||
数字范围 ..
(4)Interpolation
? Interpolation有两种类型:
? 通用Interpolation:${expr}
? 数字Interpolation:#{expr}或#{expr; format} ? 注意:Interpolation只能用于文本部分 ? 通用Interpolation
? 插入字符串值:直接输出表达式结果
? 插入数字值:根据缺省格式(由#setting指令设置)将表达式结果转换成文本输出;可
以使用内建函数string格式化单个Interpolation,下面是一个例子:
<#setting number_format=\<#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(\${lastUpdated?string(\${lastUpdated?string(\ 输出的结果类似下面的格式:
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 ? 数字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 --> FreeMarker设计指南(4)
4、杂项
(1)用户定义指令
? 宏和变换器变量是两种不同类型的用户定义指令,它们之间的区别是宏是在模板中使用
macro指令定义,而变换器是在模板外由程序定义,这里只介绍宏 ? 基本用法
? 宏是和某个变量关联的模板片断,以便在模板中通过用户定义指令使用该变量,下面是
一个例子:
<#macro greet> ? 作为用户定义指令使用宏变量时,使用@替代FTL标记中的#
<@greet>@greet> ? 如果没有体内容,也可以使用: <@greet/> ? 参数
? 在macro指令中可以在宏变量之后定义参数,如:
<#macro greet person> #macro> ? 可以这样使用这个宏变量: <@greet person=\/> and <@greet person=\/> 输出结果是:
and ? 宏的参数是FTL表达式,所以下面的代码具有不同的意思: <@greet person=Fred/> ? 这意味着将Fred变量的值传给person参数,该值不仅是字符串,还可以是其它类型,甚至是复杂的表达式
? 宏可以有多参数,下面是一个例子:
<#macro greet person color> #macro> ? 可以这样使用该宏变量:
<@greet person=\