天天看點

FreeMarker入門學習筆記(一)

簡介

FreeMarker是模闆引擎,一個Java類庫。

  • 模闆編寫為FreeMarker Template Language (FTL)
    FreeMarker入門學習筆記(一)
    這種方式通常被稱為MVC (模型 視圖 控制器) 模式。它可以幫助從開發人員(Java程式員)中分離出網頁設計師(HTML設計師)。
    FreeMarker入門學習筆記(一)

入門:

1. 模闆+資料模型 = 輸出

1.1. 資料模型

  • 在模闆檔案放在Web伺服器之後,就像動态網頁一樣,當有人通路該頁面,FreeMarker會動态的轉換模闆,替換${}部分,之後将結果發送至通路者的Web浏覽器中。
  • 保證模闆專注于顯示問題(視覺設計,布局和格式化)是高效使用模闆引擎的關鍵。
  • 為模闆準備的資料整體被稱作為 資料模型,資料模型就是各種資料的集合(可以了解為樹形結構),這些資料可以通過一些getxx方法擷取。

1.2. 資料結構

  • 如果是序列資料,則采用xx.xxx[0]的通路方式

2. 指令

2.1. 基本指令

  • ${}這樣的表達式稱作interpolation(插值)
  • FTL标簽(即指令)以#開頭
  • FTL注釋不會出現在輸出中(頁面)

2.1.1. if指令的使用示例

<#if animals.python.price < animals.elephant.price>
  Pythons are cheaper than elephants today.
<#elseif animals.elephant.price < animals.python.price>
  Elephants are cheaper than pythons today.
<#else>
  Elephants and pythons cost the same today.
</#if>
           

2.1.2. 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.1.3. include指令的使用示例

當我們需要将頁面的某一部分多次展示時,就可以将它視為一個“模闆”,比如左邊的菜單,其代碼放在一個leftMenu.ftl中,然後在首頁面ftl中引入它。

leftMenu.ftl

<div class="page-sidebar">
<div class="sidebar-menugroup">
    <div class="sidebar-grouptitle">個人中心</div>
    <ul class="sidebar-menu">
        <li class="sidebar-menuitem"><a href="notifications">最新通知</a></li>
        <li class="sidebar-menuitem active"><a href="mybookings">我的預定</a></li>
        <li class="sidebar-menuitem"><a href="mymeetings">我的會議</a></li>
    </ul>
</div>
           

main.ftl

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    ...
    <#include '*/leftMenu.ftl'>
    ...
</body>
</html>
           

2.1.4.聯合使用指令

指令間可以很容易地互相嵌套。

2.1.5.使用内建函數

包括首字母大寫、大寫、給出項目個數等方法。

  • animal.name?cap_first 給出 animal.name的首字母大寫版本
  • user?upper_case 給出 user 值的大寫版本
  • animals?size 給出 animals 序列中項目的個數

2.1.6.處理不存在的變量

?? 來詢問一個變量是否存在。如果user變量不存在,則會忽略“問候”的代碼段。

參考: 模闆一覽 - FreeMarker 中文官方參考手冊 (foofun.cn)