freemarker语法开发指南

freemarker语法开发指南
0
常用语法
 EG.一个对象BOOK
  
1.输出 $...{book.name}
空值判断:$
...{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=true />
$
...{foo?string("yes","no")} <#-- yes -->

 】内置方法

 

一:数字型
< #assign answer = 42 />
$
... {answer}
$
... {answer?string}    < # --  the same as $ ... {answer}   -->
$
... {answer?string.number}
$
... {answer?string.currency}
$
... {answer?string.percent}

< #setting number_format = " 0.###E0 " />

$
... {12345?string("0.####E0")}   


$
... {answer?string("number")}  等同于:$ ... {answer?string.number} .

二:日期型:
预定义格式包括:
short  ,middle和long。


$
... {openingTime?string.short}
$
... {openingTime?string.medium}
$
... {openingTime?string.long}
组合使用:$
... {lastUpdated?string.short_long}
$
... {lastUpdated?string("yyyy-MM-dd HH:mm:ss zzzz")}

三:逻辑型
foo
? string
foo
? string( " yes " " no " )

 

 

四:序列的内置方法:
first

last

seq_contains
$
... {x?seq_contains("blue")?string("yes""no")}

seq_index_of

seq_last_index_of

reverse

size

sort

sort_by
多层次的hash排序

< #assign members  =  [
    
... {"name"...{"first""Joe""last""Smith"}"age"40} ,
    
... {"name"...{"first""Fred""last""Crooger"}"age"35} ,
    
... {"name"...{"first""Amanda""last""Fox"}"age"25} ] >
Sorted by name.last: 
< #list members ? sort_by([ ' name ' ' last ' ]) as m >
-  $ ... {m.name.last} , $ ... {m.name.first} : $ ... {m.age}  years old
</ #list >  

chunk:将一个序列分解成几个序列。

< #assign seq  =  [ ' a ' ' b ' ' c ' ' d ' ' e ' ' f ' ' g ' ' h ' ' i ' ' j ' ] >

< #list seq ? chunk( 4 ) as row >
  
< #list row as cell > $ ... {cell}   </ #list >
</ #list >

< #list seq ? chunk( 4 ' - ' ) as row >
  
< #list row as cell > $ ... {cell}   </ #list >
</ #list >
chunk经常用于分栏或者表格输出的格式。

五:hash内置方法:

keys:
values:

 

】序列 由逗号分隔的变量列表,由方括号限定,类似java中的一维数组

<#assign seq = ["winter", "spring", "summer", "autumn"]>
<#list seq as x>
  ${x_index + 1}. ${x}

<#if x_has_next>,

</#list>

输出
  1. winter,
  2. spring,
  3. summer,
  4. autumn  

】Hashes(散列)-由逗号分隔的键-值列表,由大括号限定,键和值之间用冒号分隔:{"name":"green mouse", "price":150},键和值都是表达式,但是键必须是字符串。

 

< #assign ages  =   ... {"Joe":23"Fred":25}   +   ... {"Joe":30"Julia":18} >
-  Joe is $ ... {ages.Joe}
-  Fred is $ ... {ages.Fred}
-  Julia is $ ... {ages.Julia}  

 

结果:
-  Joe is  30
-  Fred is  25
-  Julia is  18  

 

freemarker的空值和默认值

${user?if_exists}      

${user?default('your name')}

判断对象是不是null
<#if mouse?exists>
      Mouse found
<#else>

或<#if book.name?? >

 Mouse found

</#if>

list 空值判断  <#if bookList?size = 0>

算术运算

比较操作符- < # if  expression > ... </ # if >
1 .)使用 = (或 == ,完全相等)测试两个值是否相等,使用 !=  测试两个值是否不相等
2 .) = != 两边必须是相同类型的值,否则会产生错误,例如 < # if   1   =   " 1 " > 会引起错误
3 .)Freemarker是精确比较,所以 " x " " x   " " X " 是不相等的
4 .)对数字和日期可以使用 < <= > >= ,但不能用于字符串
5 .)由于Freemarker会将 > 解释成FTL标记的结束字符,所以对于 > >= 可以使用括号来避免这种情况,例如 < # if  (x  >  y) > ,另一种替代的方法是,使用lt、lte、gt和gte来替代 < <= > >=

逻辑操作符-
&& (and)、 || (or)、 ! (not),只能用于布尔值,否则会产生错误
< # if  x  <   12   &&  color  =   " green " >
  We have less than 
12  things, and they are green.
</ # if >
< # if   ! hot >   < # --  here hot must be a  boolean   -->
  It
' s not hot.
</ # if >   

内置函数-用法类似访问hash(散列)的子变量,只是使用
" ? " 替代 " . " ,例如:user ? upper_case
下面列出常用的一些函数:
对于字符串
html-对字符串进行HTML编码
cap_first-使字符串第一个字母大写
lower_case-将字符串转换成小写
trim-去掉字符串前后的空白字符
对于Sequences(序列)
size-获得序列中元素的数目
对于数字
int -取得数字的整数部分(如 - 1.9 ? int的结果是 - 1

例一:

< # --  test的值为Tom  &  Jerry  -->
$
... {test?html}
$
... {test?upper_case?html}
结果:
Tom 
& amp; Jerry
TOM 
& amp; JERRY 

例二:

< # --  seasons的值为 " winter " " spring " " summer " " autumn "   -->  
$
... {seasons?size}
$
... {seasons[1]?cap_first}   < # --  left side can by any expression  -->
$
... {"horse"?cap_first}   
结果:
4
Spring
Horse  

方法的调用
$
... {repeat("What"3)}  
$
... {repeat(repeat("x"2), 3+ repeat("What"4)?upper_case}  
结果:
WhatWhatWhat
xxxxxxWHATWHATWHATWHAT 

操作符优先顺序
http://images
分享到:
评论
1 楼 txy821 2010-03-09  
<table width="100%" border="0" cellspacing="1" cellpadding="0">
      <tr>
      <#assign n = 0 />
      <#list list?if_exists as pojo>
      <#assign n = n+1 />
      <#if n%3 = 0 ></tr><tr></#if>
      <td  class="zx_data5 border_left border_left  border_top">${pojo.webName?if_exists} <span class="red">(${pojo.company.shortName?if_exists})</span></td>
      </#list>
     </tr>
    </table>

你可能感兴趣的:(spring,html,freemarker,F#,J#)