FreeMarker常用技巧

FreeMarker常用技巧

1 截取字符串

有的时候我们在页面中不需要显示那么长的字符串,比如新闻标题,这样用下面的例子就可以自定义显示的长度

<#if title.content?length lt 8>
           ${title.content?default("")}
      <#else>
           ${title.content[0..3]?default("")}...

意思就是如果这个字符串的长度小于8,那么就正常显示,反之则取4位
注意:常用的比较运算符
||||
|:–:|:–:|
|=(==)|判断两个值是否相等|
|!=|不相等|
|>(gt)|判断左边是否大于右边|
|>=(gte)|判断左边是否大于等于右边|
|<(lt)|判断左边是否小于右边|
|<=(lte)|判断左边是否小于等于右边|
|||

2 连接字符串

${"Hello," + user + "!"} //输出结果为:hello,swiftlet.net!

3 日期格式和boolean类型,转化为string类型

${lastUpdate?string("yyyy-MM-dd HH:mm:ss")}
输出结果如下:
2003-04-08 21:24:44
<#assign foo=true/> ${foo?string("yes","no")} //输出结果:yes

4 排序

升序用sort_by()
<#list list?sort_by("字段") as x> </#list>
降序用sort_by()?reverse
<#list list?sort_by("字段")?reverse as x> </#list>

5 去空格

${xx?trim}

6 数值精度控制

mX:小数部分最小X位。
MX:小数部分最大X位。

<#assign x=2.582/>
<#assign y=4/>
#{x; M2}//2.58
#{y; M2}//4
#{x; m1M2}//2.58
#{y; m1M2}//4.0

7 内置函数

html:**字符串中所有的特殊HTML字符都需要用实体引用来代替(比如<代替<)
**cap_first:**字符串的第一个字母变为大写形式
**lower_case:**字符串的小写形式
**upper_case:**字符串的大写形式
**trim:**去掉字符串首尾的空格
序列使用的内建函数:
**size:
序列中元素的个数
数字使用的内建函数:
**int:**数字的整数部分(比如-1.9?int就是-1)

**length:**字符串的长度
**string :**把其他格式的数据,转化为string类型
${test?html} ${test?upper_case?html}
假设字符串test存储”Tom & Jerry”,那么输出为:
Tom &amp; Jerry TOM &amp; JERRY
${seasons?size} ${seasons[1]?cap_first} ${"horse"?cap_first}
假设seasons存储了序列”winter”, “spring”, “summer”, “autumn”,那么上面的输出将会是:
4 Spring Horse

8 顶层变量

所谓顶层变量就是直接放在数据模型中的值。
Map root = new HashMap(); root.put("name","admin");//name是一个顶层对象
对于顶层变量,直接使用${variableName}来输出变量值

9 集合连接运算符

集合连接运算是将两个集合连接成一个新的集合,连接集合的运算符是’+’.
<#list ["一","二","三"] + ["四","五","六"] as x> ${x} </#list>
//输出结果如下:
一二三四五六

10 算术运算符

取整运算
<#assign x=5> ${(x/2)?>int}//2 ${1.1?int}//1 ${1.999?int} //1 ${-1.1?int}//-1

11 list、break指令

<#list sequence as item> ... </#list>
**tem_index:**当前变量的索引值.
**item_has_next:**是否存在下一个对象.
<#list ["星期一","星期二","星期三","星期四","星期五","星期六"] as x> ${x_index + 1}.${x} <#if x_has_next>,</#if> <#if x="星期四"><#break></#if> </#list>
输出结果:
1.星期一,
2.星期二,
3.星期三,
4.星期四,

12 import指令

<#import path as mapObject>
**path:**指定要被导入的模板文件.
**mapObject:**是一个Map对象.
意思:将path路径中的变量都放在mapObject中.
例子:<#import "/lib/common.ftl" as com>

13 宏的基本用法

例如:
<#macro greet> <font size="+2"> Hello JOE!</font> </#macro>
使用时:
<@greet></@greet>
如果没有体内容也可以用
<@greet />
可以在宏定义之后定义参数,宏参数是局部变量,只在宏定义中有效。如:
<#macro greet person> <font size="+2"> Hello ${person}!</font> </#macro>
使用时:
<@greet person="emma"> and <@greet person="LEO">
输出为:
<font size="+2"> Hello emma!</font> <font size="+2"> Hello LEO!</font>

注意:宏的参数是FTL表达式,所以,person=emma和上面的例子中具有不同的意义,这意味着将变量emma的值传给person,这个值可能是任意一种数据类型,甚至是一个复杂的表达式。
宏可以有多个参数,使用时参数的次序是无关的,但是只能使用宏中定义的参数,并且对所有参数赋值。如:
<#macro greet person color> <font size="+2" color="${color}"> Hello ${person}!</font> </#macro>
使用时:
<@greet color="black" person="emma" />正确
<@greet person="emma" />错误,color没有赋值,此时,如果在定义宏时为color定义缺省值<#macro greet person color="black">这样的话,这个使用方法就是正确的。


 上一篇
FreeMarker内建函数介绍 FreeMarker内建函数介绍
FreeMarker内建函数介绍Sequence的内置函数sequence?first 返回sequence的第一个值。 sequence?last 返回sequence的最后一个值。 sequence?reverse 将sequence的
2019-08-19
下一篇 
FreeMarker数据类型 FreeMarker数据类型
FreeMarker数据类型字符串类型定义字符串可以使用双引号和单引号,例如: <#assign temp = "some text" /> 或者 <#assign temp = 'some
2019-08-19
  目录