freemarker 模板開發入門,freemarker模板

來源:互聯網
上載者:User

freemarker 模板開發入門,freemarker模板

資料模型

scalars標量:從根 root 開始指定它的路徑,每級之間用點來分隔。

如:whatnot.fruits

sequences 序列:使用數組的方括弧方式來訪問一個序列的子變數。

如:animals[0].name,whatnot.fruits[1]

總結:

資料模型可以被看做是樹狀結構的。
標量儲存單一的值,這種類型的值可以是字串,數字,日期/時間或者是布爾值。
雜湊表是儲存變數和與其相關且有唯一標識名稱變數的容器。
序列是儲存有序變數的容器。儲存的變數可以通過數字索引來檢索,索引通常從零開始。 


模板

${…}:FreeMarker 將會輸出真實的值來替換花括弧內的運算式,這樣的運算式被稱為interpolations 插值.

FTL tags 標籤(FreeMarker 模板的語言標籤):它們是 FreeMarker 的指令而且是不會直接輸出出來的東西。這些標籤的使用一般以符號#開頭。(使用者自訂的 FTL 標籤使用@符號來代替#)

Comments 注釋:FreeMarker 的注釋和 HTML 的注釋相似,但是它用<#--和-->來分隔的。任何介於這兩個分隔字元(包含分隔字元本身)之間內容會被 FreeMarker 忽略,就不會輸出出來了。 

directives 指令:就是所指的 FTL 標籤。這些指令在 HTML 的標籤(如<table>和</table>)和 HTML 元素(如 table 元素)中的關係是相同的。(如果現在你還不能區分它們,那麼把“FTL 標籤”和“指令”看做是同義字即可。)

指令樣本

1 if 指令

<html> <head>  <title>Welcome!</title> </head> <body>  <h1>  Welcome ${user}<#if user == "Big Joe">, our beloved leader</#if>!  </h1>  <p>Our latest product:  <a href="${latestProduct.url}">${latestProduct.name}</a>! </body> </html>

我們來詳細說說 condition (條件判斷)的使用:==是來判斷在它兩側的值相等的操作符,比較的結果是布爾值,true 或者 false。在==的左側,是引用的變數,我們很熟悉這樣的文法,它會被變數的值來替代。右側是指定的字串,在模板中的字串必須放在引號內。
使用<#else>標籤可以指定當條件為假時程式執行的內容。

<#if animals.python.price < animals.elephant.price>  Pythons are cheaper than elephants today. <#else>  Pythons are not cheaper than elephants today. </#if> 
如果變數本身就是布爾值(true 或者 false),那麼可以直接讓其作為 if 的條件
condition:
<#if animals.python.protected>  Warning! Pythons are protected animals! </#if> 

2 list 指令
當需要用列表來遍曆集合的內容時,list 指令是非常好用的。例如,如果在模板中用前面樣本描述序列的資料模型。 

<p>We have these animals: <table border=1>  <tr><th>Name<th>Price  <#list animals as being>  <tr><td>${being.name}<td>${being.price} Euros  </#list> </table> 
list 指令的一般格式為:
<#list sequence as loopVariable>repeatThis</#list>
repeatThis 部分將會在給定的 sequence 遍曆時在每項中重複,從第一項開始,一個接著一個。在所有的重複中,loopVariable 將持有當前項的值。這個迴圈變數僅存在於<#list …>和</#list>標籤之間。

3 include 指令 

使用 include 指令,我們可以在當前的模板中插入其他檔案的內容。
假設要在一些頁面中顯示著作權聲明的資訊。那麼可以建立一個檔案來單獨包含著作權聲明,之後在需要它的地方插入即可。比方說,我們可以將著作權資訊單獨存放在分頁檔copyright_footer.html 中。

<hr> <i> Copyright (c) 2000 <a href="http://www.acmee.com">Acmee Inc</a>, <br> All Rights Reserved. </i> 
當需要用到這個檔案時,可以使用 include 指令來實現插入。

<html> <head>  <title>Test page</title> </head> <body>  <h1>Test page</h1>  <p>Blah blah... <#include "/copyright_footer.html"> </body> </html>

4 聯合使用指令

<p>We have these animals: <table border=1>  <tr><th>Name<th>Price  <#list animals as being>  <tr>  <td>  <#if being.size == "large"><font size="+1"></#if>  ${being.name}  <#if being.size == "large"></font></#if>  <td>${being.price} Euros  </#list> </table> 

5 處理不存在的變數 

不論在哪裡引用變數,都可以指定一個預設值來避免變數丟失這種情況,通過在變數名後面跟著一個!和預設值。就像下面的例子,當 user 從資料模型中丟失時,模板將會將user 的值表示為字串”Anonymous”。(若 user 並沒有丟失,那麼模板就會表現
出”Anonymous”不存在一樣): 

<h1>Welcome ${user!"Anonymous"}!</h1> 
當然也可以在變數名後面通過放置??來詢問 FreeMarker 一個變數是否存在。將它和 if指令合并,那麼如果 user 變數不存在的話將會忽略整個問候程式碼片段: 

<#if user??><h1>Welcome ${user}!</h1></#if>
關於多級訪問的變數,比如 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)??來看。









freemarker初學

自己寫的,freemarker需要載入這個模板檔案,然後與資料結合,產生HTML
 
freemarker設定模板路徑問題,看清問題了在回答,不要答非所問

reqeust.getRealPath("/") + "ftl"
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.