FreeMarker使用笔记

来源:互联网 发布:dota2起源2多核优化 编辑:程序博客网 时间:2024/06/06 23:56

20141005 add:

处理不存在的变量---参考freemarker手册
1、设置默认值---格式:   !默认值

<h1>Welcome ${user!"Anonymous"}!</h1>

2、多级访问的变量默认值
animals.python.price!0
(animals.python.price)!0

用 () 包含,这样animals或python不存在时,输出值还是为默认值,不会抛异常。

20140529 add:

快速判断某个对象包含子对象是否存在
<#if pc.pageInfo?exists></#if>
上述这段代码,是用来判断pageInfo这个对象是否存在,如果pc不存在,则会报错。

快速判断方案:
<#if (pc.pageInfo)??></#if>
这样,即使pc不存在,判断式也不会报错了。

适用于一个页面作为模板,多种展现方式。


20140630 add:
提个小建议
ftl中类似这种
${fans.fansUser.user.uid}
可以加上null处理
${(fans.fansUser.user.uid)!}

否则ftl的报错会把错误信息带回客户端 ,不会被我们的框架捕捉500

FreeMarker List使用

转载自:http://blog.csdn.net/nairuohe/article/details/6292190


在模版页里用list展示列表内容,非常方便。全部用例子来说吧。

最常用的用法 :
<#list users as user>
      <span>${user.name}</span>
      <span>${user.age}</span></br>
</#list>
这里,是假设java类里有一个users的数组,或者Map,或者List等等,它的里面放的是user类,每个user有自己name,age属性。
最后显示的结果就是users里面所有user的姓名和年龄。

上例中的users处也可以是用现场定义的,如
<#list [1,2,3,4] as index>
     <span>${index}</span>
</#list>
结果显示是:1234

如果只是想要计数,也可以这样写
<#list 1..4 as index>
   <span>${index}</span>
</#list>
结果和上面是一样的,也是1234

如果需要显示当前循环到第几项,可以这样写
<#list ["hello","welcome","hi"] as word>
    <span>${word_index+1},${word}</span></br>
</#list>
as 后面的那个变量,加上_index,就可以表示当前循环到第几项
结果是:
1,hello
2,welcome
3,hi

有时候,最后一项在显示的时候可能要做特殊处理,怎么判断最后一项?
<#list ["hello","welcome","hi"] as word>
    <span>${word}</span><#if word_has_next>,</#if></#list>
as 后面的那个变量,加上_has_next,就可以判断是否最后一项
结果是:
hello,welcome,hi

如果想在循环中判断到某一项时退出,可以这样做
<#list users as user>
   <span>${user.name}</span>
   <#if user.name == "pxx"><#break></#break>
</#list>


2、if 和else:相当于jstl的if或者choose

<#list imageList as image>
      <#if image.id == 0>
          <li> 啊啊啊啊啊 </li>

       <#else>

             <li> 啊啊啊啊啊 </li>         
       </#if>
</#list>

 

3、字符串截取相关

<#if   news.title?length   lt   13   >  //判断要截取字符长度‘lt’小于 
  {news.title} 

 <#else>                                                               

   ${news.title[0..12]}... 
</#if>

4、时间格式化相关

  ${book.date?string('yyyy-MM-dd HH:mm:ss')} 或者${book.date?string('yyyy-MM-dd')}

5、金钱相关的和数字四舍五入

${1?string("000.00")}   001.00
${12.1?string("000.00")} 12.10
${123.456?string("000.00")}  123.46

6、数字相关

${num?string('0.00')} 
如果小数点后不足两位,用 0 代替 

${num?string('#.##')} 
如果小数点后多余两位,就只保留两位,否则输出实际值 
输出为:1239765.46 

${num?string(',###.00')} 
输出为:1,239,765.46 
整数部分每三位用 , 分割,并且保证小数点后保留两位,不足用 0 代替 

${num?string(',###.##')} 
输出为:1,239,765.46 
整数部分每三位用 , 分割,并且小数点后多余两位就只保留两位,不足两位就取实际位数,可以不不包含小数点 

${num?string('000.00')} 
输出为:012.70 
整数部分如果不足三位(000),前面用0补齐,否则取实际的整数位 

${num?string('###.00')} 
等价于 
${num?string('#.00')} 
输出为:12.70

7、页面如果获取的实体ID为8位的,要进行格式化

例子:<li class="item"><a href="/product/category-${product.firstLevelId?c}-${product.secondLevelId?c}-${pctlist.id?c}</li>

如果id为100000的,如果不架上"?c",就会变成格式化的“100,000”


0 0