freemarker基本用法

來源:互聯網
上載者:User

處理不存在的變數:
1、一個不存在的變數和一個是null 的變數,對於FreeMarker 來說是一樣的,不論在哪裡引用變數,都可以指定一個預設值來避免變數丟失這種情況,通過在變數名後面跟著一個!和預設值,例如:<h1>Welcome ${user!"Anonymous"}!</h1>

2、當然也可以在變數名後面通過放置??來詢問FreeMarker 一個變數是否存在。將它和if
指令合并,那麼如果user 變數不存在的話將會忽略整個問候程式碼片段:<#if user??><h1>Welcome ${user}!</h1></#if>
3、多級訪問的變:
比如animals.python.price , 書寫代碼:
animals.python.price!0,僅當animals.python 存在而僅僅最後一個子變
量price 可能不存在(這種情況下我們假設價格是0)。如果animals 或者python
不存在,那麼模板處理過程將會以“未定義的變數”錯誤而停止。為了防止這種情況的發生,
可以這樣來書寫代碼(animals.python.price)!0。這種情況下當animals 或
python 不存在時運算式的結果仍然是0。對於??也是同樣用來的處理這種邏輯的:
animals.python.price??對比(animals.python.price)??來看
4、檢測不存在的值:
這個操作符告訴我們一個值是否存在。基於這種情況,結果是true 或false。
樣本如下,假設並沒有名為mouse 的變數:
<#if mouse??>
Mouse found
<#else>
No mouse found
</#if>
Creating mouse...
<#assign mouse = "Jerry">
<#if mouse??>
Mouse found
<#else>
No mouse found
</#if>
輸出為:
No mouse found
Creating mouse...
Mouse found

執行個體:
? 預設值:name!"unknown" 或者(user.name)!"unknown" 或者
name! 或者 (user.name)!
? 檢測不存在的值:name?? 或者(user.name)??

序列:
1、也可以用start..end 定義儲存數字範圍的序列,這裡的start 和end 是處理數
字值運算式,比如2..5 和[2, 3, 4, 5]是相同的,但是使用前者會更有效率(記憶體
佔用少而且速度快)。可以看出前者也沒有使用方括弧,這樣也可以用來定義遞減的數字範
圍,比如5..2。(此外,還可以省略end,只需5..即可,但這樣序列預設包含5,6,7,8
等遞增量直到無窮大)

2、序列的串連可以使用+號來進行:
<#list ["Joe", "Fred"] + ["Julia", "Kate"] as user>
- ${user}
</#list> 將會列印出:
- Joe
- Fred
- Julia
- Kate
通過這種方式進行的許多重複串連最終產生的序列讀取的速度會慢

3、序列切分:
如果seq儲存序列"a", "b", "c",
"d", "e", "f",那麼運算式seq[1..4]將會是含有"b", "c", "d", "e"的序列(索
引為1 的項是"b",索引為4 的項是"e")。
lastindex 可以被省略,那麼這樣將會讀取到序列的末尾。如果seq 儲存序列"a",
"b", "c", "d", "e", "f",那麼seq[3..]將是含有"d", "e", "f"的序列

雜湊表操作:
像連接字串那樣,也可以使用+號的方式來串連雜湊表。如果兩個雜湊表含有鍵相同
的項,那麼在+號右側的雜湊表中的項目優先。例如:
<#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

內建函數使用:

1、字串使用的內建函數:
? html: 字串中所有的特殊HTML 字元都需要用實體引用來代替(比如<代替&lt;)。
? cap_first:字串的第一個字母變為大寫形式
? lower_case:字串的小寫形式
? upper_case:字串的大寫形式
? trim:去掉字串首尾的空格
? 序列使用的內建函數:
? size:序列中元素的個數
? 數字使用的內建函數:
? int:數位整數部分(比如-1.9?int 就是-1)
2、執行個體:
${test?html}
${test?upper_case?html}
${seasons?size}
${seasons[1]?cap_first} <#-- left side can by any expression -->
${"horse"?cap_first}
假設seasons 儲存了序列"winter", "spring", "summer", "autumn",那
麼上面的輸出將會:
4
Spring
Horse

3、當產生HTML 時,你最好將完整的模板放入到escape 指令中。那麼,
如果book.title 包含&,它就會在輸出中被替換成&amp;,而頁面還會保持格式良好
的HTML。如果使用者注釋包含如<iframe>(或其它的元素)的標記,那麼就會被轉義成
如&lt;iframe&gt;的樣子,使他們沒有任何有害點。但是有時在資料模型中真的需要
HTML,比如我們假設上面的book.description 在資料庫中的儲存是HTML 格式的,
那麼此時你不得不使用noescape 來抵消escape 的轉義

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

${mouse!"No mouse."}
<#assign mouse="Jerry">
${mouse!"No mouse."}
將會輸出:
No mouse.
Jerry

自訂指令可以使用macro:
1、宏是有一個變數名的模板片段,例如:
<#macro greet>
<font size="+2">Hello Joe!</font>
</#macro>
macro 指令自身不列印任何內容,它只是用來建立宏變數,所以就會有一個名為
greet 的變數。在<#macro greet>和</#macro>之間的內容(稱為宏定義體)當
使用它作為指令時將會被執行
<@greet></@greet>將會列印:<font size="+2">Hello Joe!</font>
2、在macro 指令中,宏名稱的後面位置是用來定義變數的
(a)
<#macro greet person>
<font size="+2">Hello ${person}!</font>
</#macro>
那麼就可以這樣來使用這個宏:
<@greet person="Fred"/> and <@greet person="Batman"/>
這和HTML 的文法是很相似的,它會列印出:
<font size="+2">Hello Fred!</font>
and <font size="+2">Hello Batman!</font>
(b)
自訂指令可以有多個參數。如下所示,再添加一個新的參數color:
<#macro greet person color>
<font size="+2" color="${color}">Hello ${person}!</font>
</#macro>
那麼,這個宏就可以這樣來使用:
<@greet person="Fred" color="black"/>
(c)
自訂指令可以嵌套內容, 和預定義指令相似:
<#macro border>
<table border=4 cellspacing=0 cellpadding=4><tr><td>
<#nested>
</td></tr></table>
</#macro>
<#nested>指令執行位於開始和結束標記指令之間的模板程式碼片段。如果這樣寫:
<@border>The bordered text</@border>
那麼就會輸出:
<table border=4 cellspacing=0 cellpadding=4><tr><td>
The bordered text
</td></tr></table>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.