${\
? 可以使用+操作符获得同样的结果
${\ ${user + user + user + user}
? ${..}只能用于文本部分,下面的代码是错误的:
<#if ${isBig}>Wow!#if> <#if \
应该写成:
<#if isBig>Wow!#if>
? 子串
? 例子(假设user的值为“Big Joe”):
${user[0]}${user[4]} ${user[1..4]}
结果是(注意第一个字符的索引是0):
BJ ig J
? 序列操作
? 连接操作:和字符串一样,使用+,下面是一个例子:
<#list [\ - ${user} #list>
输出结果是:
- 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来替代<、<=、>和>= ? 逻辑操作符
? &&(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 -->
4、杂项
(1)用户定义指令