freemarker使用记录

freeMarker语法http://uule.iteye.com/blog/879566

Freemarker页面语法http://jiangsha.iteye.com/blog/372307

算术运算符

FreeMarker表达式中完全支持算术运算,FreeMarker支持的算术运算符包括:+,-,*,/,%看如下的代码:

<#assignx=5>

${x*x-100}

${x/2}

${12%10}

输出结果是:

-752.52

在表达式中使用算术运算符时要注意以下几点:

1,运算符两边的运算数字必须是数字

2,使用+运算符时,如果一边是数字,一边是字符串,就会自动将数字转换为字符串再连接,如:${3+"5"},结果是:35

使用内建的int函数可对数值取整,如:

<#assignx=5>

${(x/2)?int}

${1.1?int}

${1.999?int}

${-1.1?int}

${-1.999?int}

结果是:211-1-1

比较运算符

表达式中支持的比较运算符有如下几个:

1,=或者==:判断两个值是否相等.

2,!=:判断两个值是否不等.

3,>或者gt:判断左边值是否大于右边值

4,>=或者gte:判断左边值是否大于等于右边值

5,<或者lt:判断左边值是否小于右边值

6,<=或者lte:判断左边值是否小于等于右边值

注意:=和!=可以用于字符串,数值和日期来比较是否相等,但=和!=两边必须是相同类型的值,否则会产生错误,而且FreeMarker是精确比较,"x","x","X"是不等的.其它的运行符可以作用于数字和日期,但不能作用于字符串,大部分的时候,使用gt等字母运算符代替>会有更好的效果,因为FreeMarker会把>解释成FTL标签的结束字符,当然,也可以使用括号来避免这种情况,如:<#if(x>y)>

逻辑运算符

逻辑运算符有如下几个:

逻辑与:&&

逻辑或:||

逻辑非:!

逻辑运算符只能作用于布尔值,否则将产生错误

内建函数

FreeMarker还提供了一些内建函数来转换输出,可以在任何变量后紧跟?,?后紧跟内建函数,就可以通过内建函数来轮换输出变量.下面是常用的内建的字符串函数:

html:对字符串进行HTML编码

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

lower_case:将字符串转换成小写

upper_case:将字符串转换成大写

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

下面是集合的常用内建函数

size:获取序列中元素的个数

下面是数字值的常用内建函数

int:取得数字的整数部分,结果带符号

例如:

<#assigntest="Tom&Jerry">

${test?html}

${test?upper_case?html}

结果是:Tom&amp;JerryTOM&amp;JERRY

空值处理运算符

FreeMarker对空值的处理非常严格,FreeMarker的变量必须有值,没有被赋值的变量就会抛出异常,因为FreeMarker未赋值的变量强制出错可以杜绝很多潜在的错误,如缺失潜在的变量命名,或者其他变量错误.这里所说的空值,实际上也包括那些并不存在的变量,对于一个Java的null值而言,我们认为这个变量是存在的,只是它的值为null,但对于FreeMarker模板而言,它无法理解null值,null值和不存在的变量完全相同.

为了处理缺失变量,FreeMarker提供了两个运算符:

!:指定缺失变量的默认值

??:判断某个变量是否存在

其中,!运算符的用法有如下两种:

variable!或variable!defaultValue,第一种用法不给缺失的变量指定默认值,表明默认值是空字符串,长度为0的集合,或者长度为0的Map对象.

使用!指定默认值时,并不要求默认值的类型和变量类型相同.使用??运算符非常简单,它总是返回一个布尔值,用法为:variable??,如果该变量存在,返回true,否则返回false

比较大小和逻辑运算

<#assignx=4>

<#if(x>5)>

x>5

</#if>

<#ifgridParam.dataRows??&&(gridParam.dataRows?size>0)>

表格记录数大于0

</#if>

以index为循环

<#list1..gridParam.rowsasidx>

${idx}

</#list>

定义变量和计算

<#assignallTotal=0>

<#assignallTotal=allTotal+detail.realSum>

获得list的长度

myList?size

货币,百分比格式化

三种数字格式:number,currency(货币)和percent(百分比)其中number为默认的数字格式转换

<#assigntempNum=20>

${tempNum}

${tempNum?string.number}或${tempNum?string(“number”)}结果为20

${tempNum?string.currency}或${tempNum?string(“currency”)}结果为¥20.00

${tempNum?string.percent}或${tempNum?string(“percent”)}结果为2,000%

数字格式化,详细看原文

http://www.netingcn.com/freemarker-number-format.html

${num?string('0.00')}

如果小数点后不足两位,用0代替

${num?string('#.##')}

如果小数点后多余两位,就只保留两位,否则输出实际值

输出为:1239765.46

freemarker格式化日期http://ljhzzyx.blog.163.com/blog/static/383803122013214102540434/

${dateVar?string("yyyy-MM-ddHH:mm:sszzzz")}

循环读取

<#listsequenceasitem>

...

</#list>

空值判断<#ifbookList?size=0></#list>

freemarker如何直接调用java类的某个方法

http://bbs.csdn.net/topics/260029531

将你写的类当成对象假如到MAP中

然后在再用map?key的方法获得该类

maplist.put("typeTool",this);

FREEMARKER

<#assign name=typeTool.getTypeName(key)>${name}

freemarker判断是否为空

http://www.oschina.net/code/snippet_54124_15295

<!--1\--->
<!--判断aaa是否不为空,eclipse插件老报错。--->
<#if aaa??>
  ${aaa}
</#if>
<!--2\
<#if aaa?if_exists>
  aaa不存在!
</#if>
<!--3\--->
<#if aaa?exists>
  aaa存在,值为${aaa}
</#if>

<#ifs?exists>exists用在逻辑判断

${s?if_exists}用来打印东西时用到,如果存在打印,不存在打印空字符串.

exp1?exists将会被exp1??代替

exp1?if_exists将会被exp1!代替

exp1?default(exp2)将会被exp1!exp2.

相关推荐