http://blog.csdn.net/chang_li/article/details/51913105html
在複雜頁面上(包含大量判斷、日期金額格式化)的頁面上,freemarker的性能比使用tag和el的jsp好。java
1、FreeMarker的插值有以下兩種類型:1,通用插值${expr};2,數字格式化插值:#{expr}或#{expr;format} jsp
- <pre name="code" class="html">${book.name?if_exists }
- ${book.name!"xxx"}
- ${book.date?string('yyyy-MM-dd')}
- ${book?string.number} 20
- ${book?string.currency} <#-- $20.00 -->
- ${book?string.percent} <#-- 20% -->
- ${.now?datetime}
2、FreeMarker提供兩個運算符來避免空值:1. !: 指定缺失變量的默認值;2. ??:判斷變量是否存在。!運算符有兩種用法:variable!或variable!defaultValue。第一種用法不給變量指定默認值,代表默認值是空字符串、長度爲0的集合、或長度爲0的Map對象。例子:性能
- <pre name="code" class="html"><#-- ${sss} 沒有定義這個變量,會報異常! -->
- ${sss!} <#--沒有定義這個變量,默認值是空字符串! -->
- ${sss!"abc"} <#--沒有定義這個變量,默認值是字符串abc! -->
3、??運算符返回布爾值,如:variable??,若是變量存在,返回true,不然返回false。
將它和 if 指令合併,那麼若是 user 變量不存在的話將會忽略整個問候代碼段:網站
- <#if user??><h1>Welcome ${user}!</h1></#if>
4、Freemarker中對於javabean的處理跟EL表達式一致,類型可自動轉化!很是方便!
有一點須要注意: ${..}只能用於文本部分做爲字符串輸出,不能用於判斷真假值
也就是不能這麼寫:<#if ${isBig}>Wow!</#if> ,應爲<#if isBig>Wow!</#if>
5、對list進行遍歷以及if else判斷spa
- 1)<table width="100%">
- <#list investList as item>
- <tr>
- <td align="left" style="width:50%!important;">
- ${item.userName}<br>${item.addTime?string("yyyy-MM-ddHH:mm:ss")}
- </td>
- <td align="right" style="width:50% !important;">${item.money?string('0.00')}元<br/>
- <#if item.tenderType == 0>網站投標
- <#elseif item.tenderType == 1>自動投標
- <#elseif item.tenderType == 2>手機投標
- </#if>
- </td>
- </tr>
- </#list>
- </table>
2))
- <select name="awardTypeId" class="type">
- <option value="0" selected="selected">所有</option>
- <#if typeList??>
- <#list typeList as type>
- <option value="${type.id!}" >${type.name!}</option>
- </#list>
- </select>
3)assign指令用於爲該模板頁面建立或替換一個頂層變量,
- <#assign x="Hello ${user}!">
4)