FreeMarker中常用的一些標籤及語句

首先說一下FreeMarker中的註釋爲: <#–這裏是註釋的內容 –>

if語句

<#-- 判斷num1等於18就輸出 18一枝花! -->
<#if num1==18>18一枝花!</#if>

<#-- 字符串需要加上雙引號 -->
<#if user=="小明">歡迎你</#if>

<#--布爾值 -->
<#if b2>b2是true!</#if>  

if else 語句測試:

<#-- 不是使用> 大部分時候,freemarker會把>解釋成標籤結束(大於可以寫 gt )-->

<#if num0 gt 18>  
    及格!
<#else>
    不及格!
</#if>

時間格式化處理

<#-- 將變量datel 時間格式轉換成 yyyy-MM-dd HH:mm:ss 格式輸出 -->
${date1?string("yyyy-MM-dd HH:mm:ss")}

內建函數:

1. html: 對字符串進行HTML編碼;
2. cap_first: 使字符串第一個字母大寫;
3. lower_case: 將字符串轉成小寫;
4. upper_case: 將字符串轉成大寫;
5. size  獲得集合中元素的個數(集合相關常用的內建函數)
6. int: 取得數字的整數部分(數字值相關常用的內建函數)

內建函數的使用:   變量名?內建函數名,  

假設後臺傳入一個htm2的參數,值爲 <b>粗體</b>
root.put("htm2", "<b>粗體</b>");

<#--使用內建函數 html 對字符串(htm2變量)進行HTML編碼-->
${htm2?html}

空值處理:

${sss}  <#--這樣寫 如果${sss} 沒有定義這個變量,會報異常! -->

${sss!} <#--這樣寫 沒有定義這個變量,默認值是空字符串! -->

${sss!"abc"}  <#--這樣寫 沒有定義這個變量,默認值是字符串abc! -->

遍歷集合

<#-- 遍歷 ls , as ys 表示遍歷ls時中的每個元素取別名爲 ys -->
<#list ls as ys >
    <b> ys </b><br/>
</#list>

取普通變量和對象的值:

<#--user 如果是一個普通變量,可以這樣取值-->
${user},

<#--user 如果是一個對象,可以這樣取該對象中name屬性的值-->
${user.uname}

取List集合中的數據

<#-- lst爲一個List集合 根據下標索引取對應得值 -->

${lst[0].city},
${lst[1].city},
${lst[2].city},

include包含

<#--將123.txt包含進來,這可以是包含另一個模板文件或者任何類型的文件-->
<#include "123.txt" />

自定義指令

<#--定義一個指令dtest -->
<#macro dtest>  
    <b>aaa</b>
    <b>bbb</b>
</#macro>

<#--調用上面定義的 dtest宏指令 -->
<@dtest/><@dtest />


<#--定義一個指令dtest2 如下 a b c 爲參數 -->
<#macro dtest2 a b c >
    ${a}==${b}==${c}
</#macro>

<#--調用上面定義的 dtest2宏指令,並傳人蔘數 -->
<@dtest2 a="老高" b="老張" c="老馬" />


<#--定義一個指令dtest3, <#nested>是獲取調用時標籤中間傳入的內容 -->
<#macro dtest3> 
  <table border=4 cellspacing=0 cellpadding=4>
      <tr>
          <td> 
            <#nested> 
          </td>
      </tr>
  </table> 
</#macro> 

<#--調用上面定義的 dtest3宏指令,標籤中間是傳入的內容 -->
<@dtest3 >這是要傳入的內容!</@dtest3>

測試命名空間及優先級

<#--b.ftl文件內容如下-->
<#macro copyright date>
  <p>Copyright (C) ${date} 測試</p> 
</#macro> 

<#---這裏是定義一個mail變量,值爲[email protected]  -->
<#assign mail = "123@163.com"> 
<#-- 引入一個b.ftl模板 取別名爲bb -->
<#import "b.ftl" as bb  /> 

<#--這裏是調用bb模板中的copyright指令 並傳入date參數 -->
<@bb.copyright date="2010-2011" />

<#--這裏是獲取bb模板中的mail變量值 -->
${bb.mail}

<#--在當前模板中又定義一個跟bb模板中一樣的變量-->
<#assign mail="[email protected]"  />

<#--這樣調用的是當前的模板中的mail變量,會輸出[email protected]  -->
${mail}

<!-- 重新設置bb模板中 mail變量的值  -->
<#assign mail="[email protected]" in bb  />

<#--再次獲取bb模板中的mail變量值,輸入的是修改後的值,爲[email protected] -->
${bb.mail}

比 較 運 算

=   (或者==) 判斷兩個值是否相等;
!=  判斷兩個值是否不相等;
注: =和!=可以用作字符串、數值和日期的比較,但兩邊的數據類型必須相同。
而且FreeMarker的比較是精確比較,不會忽略大小寫及空格。

 >(或者gt)    大於
>=(或者gte)   大於等於
< (或者lt)    小於
<=(或者lte)   小於等於

注: 上面這些比較運算符可以用於數字和日期,但不能用於字符串。大部分時候,使用gt比>有更好的效果,因爲FreeMarker會把>解釋成標籤的結束字符。可以使用括號來避免這種情況,如:<#if (x>y)>。


邏輯操作:!registered && (firstVisit || fromEurope) 

內建函數:name?upper_case 

方法調用:repeat("What", 3) 

處理不存在的值 
name!  或者  (user.name)!
如不存在默認值:name!"unknown"  或者(user.name)!"unknown" 

檢測不存在的值:name?? 或者(user.name)?? 

邏輯運算符

&&  邏輯與
||  邏輯或
!   邏輯非

邏輯運算符只能用於布爾值。

算術運算符

FreeMarker表達式中支持  +  -  *  /  %   運算符

數據類型常見示例

直接指定值 
字符串 : "Foo"或 者'Foo'"It's \"quoted\""r"C:\raw\string" 
數字:123.45 
布爾值:true, false 
序列:["foo", "bar", 123.45] , 1..100 
從序列中檢索:products[5] 
哈希表:{"name":"green mouse", "price":150} 
檢索變量(如 頂層變量爲 user) 
從哈希表中檢索數據:user.name, user[“name”] 
特殊變量:.main 
字符串操作 
插值(或連接):"Hello ${user}!"(或"Free" + "Marker") 
獲取一個字符:name[0] 
序列操作 
連接:users + ["guest"] 
序列切分:products[10..19]  或  products[5..] 
哈希表操作 
連接:passwords + {"joe":"secret42"} 
算數運算: (x * 1.5 + 10) / 2 - y % 100 


截取子串
截取子串可以根據字符串的索引來進行,
如果指定一個索引值,則取得字符串該索引處的字符;如果指定兩個索引值,
則截取兩個索引中間的字符串子串。如:
<#assign number="01234">
${number[0]} <#-- 輸出字符0 -->
${number[0..3]} <#-- 輸出子串“0123” -->
發佈了60 篇原創文章 · 獲贊 38 · 訪問量 27萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章