1. 程式人生 > >【 FreeMarker】比ajax更好用的展示資料的工具

【 FreeMarker】比ajax更好用的展示資料的工具

一、什麼是FreeMarker

Freemarker是一個模板引擎,基於模板生成文字輸出的通用工具,是一個java類庫,程式設計師可以嵌入他們所開發產品的元件。

Freemarker主要用於MVC中的view層,生成html展示資料給客戶端,可以完全替代jsp。 

Freemarker通常由Java程式準備要顯示的資料,由FreeMarker生成頁面,通過模板顯示準備的資料。

 

二、模板編寫(FTL)

模板編寫為FreeMarker Template Language (FTL)

2.1模板檔案

模板檔案和通常的靜態HTML頁面一樣存放在web伺服器上,當訪問該頁面時,FreeMarker會介入執行,動態轉換模板,將最新的資料內容替換掉模板中${...}的部分,之後將結果傳送到訪問者的web瀏覽器中。模板檔案示例如下:

<html>
<head>
  <title>Welcome!</title>
</head>
<body>
  <h1>Welcome ${user}!</h1>
  <a href="${latestProduct.url}">${latestProduct.name}</a>!
</body>
</html>

其中顯示的資料是在 FreeMarker 之外準備的,通常是一些 "真正的" 程式語言(比如Java) 所編寫的程式碼。這種顯示邏輯和業務邏輯相分離的做法是非常有用的。

在HTML中放置能被FreeMarker所解析的特殊程式碼片段:

  • 插值${...}:FreeMarker將會輸出真實的值來替換大括號內的表示式。
  • FTL 標籤:FTL標籤也稱為指令,以 # 開頭。下面會詳細介紹一些指令。
  • 註釋:使用 <#-- and --> 來進行註釋。

2.1.1常用的FTL指令

  1. ​​​​​​​list 指令

當需要列表顯示內容時,list指令是必須的。

<p>We have these animals:
<table border=1>
  <#list animals as animal>
    <tr><td>${animal.name}<td>${animal.price} Euros
  </#list>
</table>

那麼輸出結果將會是這樣的:

<p>We have these animals:
<table border=1>
    <tr><td>mouse<td>50 Euros
    <tr><td>elephant<td>5000 Euros
    <tr><td>python<td>4999 Euros
</table>

 

2.2 資料模型

為模板準備的資料整體被稱作為 資料模型。資料模型是樹形結構(就像硬碟上的資料夾和檔案),在視覺效果上, 資料模型可以是:

(root)
  |
  +- user = "Big Joe"
  |
  +- latestProduct
      |
      +- url = "products/greenmouse.html"
      |
      +- name = "green mouse"

上面只是一個形象化顯示;資料模型不是文字格式,它來自於Java物件。 對於Java程式設計師來說,root就像一個有 getUser() 和 getLatestProduct() 方法的Java物件, 也可以有 "user" 和 "latestProducts" 鍵值的Java Map物件。相似地,latestProduct 就像是有 getUrl() 和getName() 方法的Java物件。

總的來說:模板 + 資料模型 = 輸出