您的位置:首页 > 其它

【freemarker总结】——最常用的指令

2015-05-14 17:31 501 查看
1、空值的判断(!的使用)

对于null,或者miss value,freemarker会报错

我们可以使用 感叹号 来进行空值的判断

例如${user.group!"空值"}

如果user里没有group这个属性的值,那么它就会输出"空值"

再例如 ${user.group.name!"空值"},这样使用就是不可以的,这样写依然会报错,因为freemarker仅仅只会判断group.name是不是空值

所以我们应该这样写${(user.group.name)!"空值"},使用括号括起来之后就会去判断里面每一个是否是空值(连续判断)

$(demo!) 或者 ${demo!"默认值"} :如果demo是空,那么就使用空字符串或者默认值来代替

2、if指令

<#if condifition>

<#elseif condifition>

<#else>

</#if>

Boolean类型的空值判断

空值判断可以写成<#if book.name?? > //注意${}为变量的渲染显示,而<>为定义等操作符的定义,在if里面不能使用$符号

——

<#if demoList??>两个问号判断是否是空值,返回bool

<#if ${user.login??}>或<#if "${user.login??}">都是错误的;

<#if user.login??>是正确的。

3、数字格式化

数字格式化插值可采用#{expr;format}形式来格式化数字,其中format可以是:

mX:小数部分最小X位

MX:小数部分最大X位

eg:#{hotgood.spCost ;m2M2} 最大两位,最小两位---显示两位

注: #{${hotgood.spCost} ;m2M2} 不要这样写

4、list--break


<#list sequence as item>

</#list>

item_index :list序列号,从0开始

item_has_next :是否存在下一个对象.

例子:

<#list ${demoList} as item>

${item_index + 1}.${x}

<#if
item_has_next>,</#if>——当前变量的索引值.
<#if item_index == 0> 在if中不能使用$/#符号,直接使用就行

<#if
item="星期四"><#break></#if>

</#list>

输出结果:

1.星期一,

2.星期二,

3.星期三,

4.星期四,

5、常用

FreeMarker的插值有如下两种类型:1,通用插值${expr};2,数字格式化插值:#{expr}或#{expr;format}

${book.name?if_exists } //用于判断如果存在,就输出这个值

${book.name?default(‘xxx’)}//默认值xxx

${book.name!"xxx"}//默认值xxx

${book.date?string('yyyy-MM-dd')} //日期格式

${book?string.number} 20 //三种不同的数字格式

${book?string.currency}--<#-- $20.00 -->

${book?string.percent}—<#-- 20% -->

<#assign foo=ture /> //声明变量,插入布尔值进行显示

${foo?string("yes","no")} <#-- yes -->

大小比较符号使用需要注意:(xml的原因),可以用于比较数字和日期

使用lt、lte、gt和gte来替代<、<=、>和>= 也可以使用括号<#if (x>y)>

6、定义变量

<#-- 定义变量 -->

<#assign myname="Jadyer"/>

${myname}

<#-- 定义数字 -->

<#assign mynum=10/>

${mynum + 20}

<#-- 定义字符串 -->

<#assign mystr="55"/>

${mystr + 20}

<#-- 下面的变量会覆盖上面定义的同名变量,而不会顾及数据类型是否一致 -->

<#assign mystr=55/>

${mystr + 20}

<#-- 下面的两种写法是等价的,它们连接字符串的方式分别为:字符串连接方式和插值连接方式 -->

${"hello,welcome:" + username}

${"hello,welcome:${username}"}

7、布尔值和日期的输出

<#-- 定义布尔型 --> 直接使用true和false,不使用引号.:下面是输出,这说的是判断

<#-- 如果直接输出${myflag}则会报错,因为FreeMarker不能直接输出数字或字符串以外的东西,否则都会报错 -->

<#-- 此时需要将其转换为字符串才能输出:使用xxx?string可以完成对字符串的转换。另外??用于判断变量是否存在 -->

<#assign myflag=true/>

${myflag?string}

${myflag?string("isTrue","isFalse")}

${(user.name)???string("user.nameIsTrue","user.nameIsFalse")}

<#-- 日期类型的处理。如果直接输出${currTime}则会报错,此时仍需将其转换为字符串 -->

${currTime?string("yyyy-MM-dd HH:mm:ss")}

插值结果为日期值:根据默认格式(由#setting指令设置)将表达式结果转换成文本输出.可以使用内建的字符串函数格式化单个插值,如下面的例子:

${lastUpdated?string("yyyy-MM-dd HH:mm:ss zzzz")}

${lastUpdated?string("EEE, MMM d, ''yy")}

${lastUpdated?string("EEEE, MMMM dd, yyyy, hh:mm:ss a '('zzz')'")}

输出结果是:

2008-04-08 08:08:08 Pacific Daylight Time

Tue, Apr 8, '03

Tuesday, April 08, 2003, 08:08:08 PM (PDT)

<#if demoList??>

<#list demoList as demo>

<#if demo_index == 0>

<dl class="sort unfold" id="${demo_index!}">

<#else>

<dl class="sort" id="${demo_index!}">

</#if>

<dt><i></i>${demo.head!}</dt>

<#list demo.contents as content>

<dd><a href="#">${content!}</a></dd>

</#list>

</dl>

</#list>

</#if>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: