亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

FreeMarker筆記 前言&第1章 入門

2019-11-14 21:06:42
字體:
來源:轉載
供稿:網友
FreeMarker筆記 前言&第1章 入門簡介 簡介

FreeMarker是一款模板引擎:一種基于模板的、用來生成輸出文本(任何來自于HTML格式的文本用來自動生成源代碼)的通用工具。它是為java程序員提供的一個開發包或者說是類庫。它不是面向最終用戶,而是為程序員提供的可以嵌入他們開發產品的一款應用程序。 特點 功能 基礎 概要、關鍵字 建議 前言

FreeMarker是一款模板引擎:一種基于模板的、用來生成輸出文本(任何來自于HTML格式的文本用來自動生成源代碼)的通用工具。它是為Java程序員提供的一個開發包或者說是類庫。它不是面向最終用戶,而是為程序員提供的可以嵌入他們開發產品的一款應用程序。

FreeMarker的設計實際上是被用來生成HTML網頁,尤其是通過基于實現了MVC(Model View Controller,模型-視圖-控制器)模式的Servlet應用程序。使用MVC模式的動態網頁的構思使得你可以將前端設計者(編寫HTML)從程序員中分離出來。所有人各司其職,發揮其擅長的一面。網頁設計師可以改寫頁面的顯示效果而不受程序員編譯代碼的影響,因為應用程序的邏輯(Java程序)和頁面設計(FreeMarker模板)已經分開了。頁面模板代碼不會受到復雜的程序代碼影響。這種分離的思想即便對一個程序員和頁面設計師是同一個人的項目來說都是非常有用的,因為分離使得代碼保持簡潔而且便于維護。

2014-09-03_101642[5]

FreeMarker不是Web應用框架。它是Web應用框架中的一個適用的組件。 第1章 入門 1.2 模板+數據模型=輸出 1.3 數據模型一覽 1.4 模板一覽 1.4.1 簡介

FTL tags標簽:FreeMarker模板的語言標簽。一般以符合#開頭,用戶自定義的FTL標簽使用@代替#。

Comments注釋:FreeMarker的注釋和HTML的注釋相似,但是它用<#---->來分隔。

directives指令:就是所指的FTL標簽。 1.4.2 指令示例 1.4.2.1 if指令

假設你只想向你的老板Big Joe(而不是其他人)問好,就可以這樣做:

<h1>Welcome ${user}<#if user == "Big Joe">, our beloved leader</#if>!</h1>

使用<#else>標簽:

<#if animals.python.PRice < animals.elephant.price>    Pythons are cheaper than elephants today.<#else>    Pythons are not cheaper than elephants today.</#if>

如果變量本身就是布爾值,可以直接作為if的條件;

<#if animals.python.protected>    Warniing! Pythons are protected animals!</#if>
實例

/FreeMarker-hello-web/src/main/java/org/yejq/fre/model/Animal.java

public class Animal {    private String name;    private double price;    private boolean protect;    。。。}

/FreeMarker-hello-web/src/main/java/org/yejq/fre/service/Exercises.java

    public void testIf(Model model){        model.addAttribute("user", "Big Joe");                Map<String, Animal> animals = new HashMap<String, Animal>();        animals.put("python", new Animal("python", 300, true));        animals.put("elephant", new Animal("elephant", 400, false));        model.addAttribute("animals", animals);    }

/FreeMarker-hello-web/src/main/webapp/WEB-INF/ftl/2/if.ftl

<!doctype html><html lang="en"><head>    <meta charset="UTF-8" />    <title>If指令</title></head><body>    <h1>Welcome ${user}<#if user == "Big Joe">, our beloved leader</#if></h1>    <p>        <#--大于號兩邊要加括號括起來,否則會以為是結束標簽 -->        <#if (animals.python.price > animals.elephant.price)>            python.price > elephant.price        <#else>            python.price <= elephant.price        </#if>    </p>    <p>        <#if animals.python.protect>            python.protect = true;        </#if>    </p></body></html>

測試: http://localhost/test/2/if/testIf1.4.2.2 list指令

當需求遍歷集合的內容時,list指令是非常好用的。

<#list animals as being>    <tr><td>${being.name}<td>${being.price} Euros</#list>
實例

/FreeMarker-hello-web/src/main/java/org/yejq/fre/service/Exercises.java

    public void testList(Model model){        List<Animal> animals = new ArrayList<Animal>();        animals.add(new Animal("python", 300, true));        animals.add(new Animal("elephant", 400, false));        model.addAttribute("animals", animals);    }

/FreeMarker-hello-web/src/main/webapp/WEB-INF/ftl/2/list.ftl

    <h3>list指令</h3>    <table border=1>        <#list animals as animal>            <tr>                <#-- boolean類型要設置默認輸出值,否則報錯 -->                <td>${animal.name}, ${animal.price}, ${animal.protect?c}</td>            </tr>        </#list>    </table>

測試:

http://localhost/test/2/list/testList1.4.2.3 include指令

在當前模板中插入其他文件的內容。

copyright_footer.html:

<hr><i>Copyright (c) 2000<a >Acmee Inc</a>,<br>All Rights Reserved.</i>

當需要copyright時,引入

<#include "/copyright_footer.html">
實例

/FreeMarker-hello-web/src/main/webapp/WEB-INF/ftl/2/copyright.html

<hr><i>    Copyright (c) 2000<a >Acmee Inc</a>,    <br>    All Rights Reserved.中文測試</i>

/FreeMarker-hello-web/src/main/webapp/WEB-INF/ftl/2/include.ftl

    <h3>include指令</h3>    <#include "copyright.html">

測試:http://localhost/test/2/include/null1.4.2.4 聯合使用指令

指令可以嵌套使用;1.4.2.5 處理不存在的變量

<h1>Welcome ${user!"Anonymous"}!</h1>

通過在變量名后邊跟一個!和默認值。

<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-hello-web/src/main/webapp/WEB-INF/ftl/2/null.ftl

    <h3>處理不存在的變量</h3>    <p>welcome, ${user!"anonymous"}</p>    <p>檢測user是否存在,<#if user??>Welcome, ${user}</#if></p>    <#--不加括號會報錯: nested exception is freemarker.core.InvalidReferenceException: The following has evaluated to null or missing-->    <p>多級訪問, ${(animals.python.price)!0}</p>

測試: http://localhost/test/2/null/null

參考資料書

  1. B1 :《FreeMarker中文版文檔.pdf》
  2. B2 :
項目
  1. P1:F:/360/Learn/FreeMarker/workspace/FreeMarker-hello-java/,https://github.com/yejq/FreeMarker-hello-java.git。
  2. P2:F:/360/Learn/freemarker/workspace/FreeMarker-hello-web/, https://github.com/yejq/FreeMarker-hello-web.git。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97在线免费观看| 国产成人精品久久久| 91精品国产高清久久久久久91| 91av国产在线| 国产中文字幕91| 97国产精品视频人人做人人爱| 姬川优奈aav一区二区| 亚洲成人精品视频| 最新69国产成人精品视频免费| 日韩黄色在线免费观看| 97成人精品视频在线观看| 国产日韩精品在线观看| 欧美视频在线免费| 国产一区二区三区四区福利| 国产精欧美一区二区三区| 中文字幕精品影院| 亚洲区中文字幕| 一本色道久久88精品综合| 欧美—级a级欧美特级ar全黄| 日韩成人av在线播放| 国产在线视频91| 在线视频亚洲欧美| 亚洲自拍小视频| 日韩视频一区在线| 久久精品中文字幕| 精品久久久久人成| 亚洲码在线观看| 欧美激情精品久久久久久久变态| 亚洲欧美日本另类| 黑人巨大精品欧美一区二区三区| 欧美国产中文字幕| 国产精品嫩草视频| 亚洲娇小xxxx欧美娇小| 日韩av最新在线观看| 亚洲人成欧美中文字幕| 日韩少妇与小伙激情| 亚洲成人激情小说| 欧美黄色片在线观看| 少妇久久久久久| 欧美激情精品久久久久久蜜臀| 日韩精品电影网| 国产a∨精品一区二区三区不卡| 91av在线免费观看| 国产va免费精品高清在线观看| 亚洲自拍偷拍视频| 国产精品福利在线观看网址| 日韩视频免费在线观看| 91豆花精品一区| 精品亚洲精品福利线在观看| 色综合久久久888| 欧洲成人免费视频| 一区二区三区高清国产| 欧美中文字幕在线播放| 欧美极品少妇xxxxx| 国产亚洲精品91在线| 欧美极品在线播放| 亚洲综合最新在线| 中文字幕自拍vr一区二区三区| 欧美wwwwww| 国产精品三级网站| 精品一区二区三区四区在线| 国产精品日韩在线一区| 久久久久国产精品一区| 尤物九九久久国产精品的分类| 国产精品99久久久久久人| 欧美精品一二区| 欧美激情一区二区久久久| 成人黄色av免费在线观看| 国产精品久久久久国产a级| 欧美亚洲成人xxx| 国内精品视频在线| 精品视频在线导航| 亚洲一区制服诱惑| 日韩高清不卡av| 中文字幕久久亚洲| 久久五月天色综合| 国产精品久久久久999| 日韩美女在线观看| 亚洲片av在线| 亚洲电影天堂av| www.xxxx精品| 综合久久五月天| 国产精品久久综合av爱欲tv| 精品国产乱码久久久久久天美| 国产欧美日韩综合精品| 精品欧美aⅴ在线网站| 亚洲欧美资源在线| 在线观看国产精品日韩av| 欧美激情二区三区| 日本亚洲欧洲色α| 亚洲精品美女网站| 欧美日韩亚洲成人| 亚洲国产成人精品一区二区| 日韩精品中文字幕视频在线| 欧美精品第一页在线播放| 91精品国产91久久久| 日韩av在线影院| 97国产suv精品一区二区62| 国产v综合v亚洲欧美久久| 欧美大片在线看| 国产精品高潮在线| 国产精品视频大全| 国产美女91呻吟求| 欧美激情一区二区三区高清视频| 国产精品av电影| 岛国精品视频在线播放| 81精品国产乱码久久久久久| 国产成人啪精品视频免费网| 国产精品一区二区电影| 国产成人免费91av在线| 成人日韩av在线| 在线观看欧美日韩| 国产精品国产三级国产专播精品人| 91国内免费在线视频| 国产香蕉97碰碰久久人人| 成人福利网站在线观看11| 国产在线精品播放| 在线成人中文字幕| 韩日欧美一区二区| 成人黄色在线观看| 日本韩国欧美精品大片卡二| 久久久国产成人精品| 国产精品日本精品| 亚洲成人国产精品| 国产精品爽爽爽爽爽爽在线观看| 亚洲国产精品yw在线观看| 久久激情五月丁香伊人| 日韩精品极品视频免费观看| 久久久久久国产免费| 欧美成人免费全部观看天天性色| 欧美插天视频在线播放| 亚洲第一网中文字幕| 国内外成人免费激情在线视频网站| 91精品国产综合久久香蕉最新版| 91亚洲va在线va天堂va国| 久久精品国产欧美激情| 亚洲美女又黄又爽在线观看| 日韩成人小视频| 色狠狠久久aa北条麻妃| 日韩女优人人人人射在线视频| 欧美成人免费播放| 国产精品久久999| 久久国产视频网站| 韩国v欧美v日本v亚洲| 成人激情黄色网| 国产精品激情av在线播放| 亚洲一区二区中文| 日日骚久久av| 久久天天躁狠狠躁夜夜爽蜜月| 91精品国产综合久久香蕉922| 亚洲色图五月天| 欧美激情国内偷拍| 日本久久亚洲电影| 亚洲第一视频在线观看| 日韩激情av在线免费观看| 欧美日韩在线免费观看| 最新国产精品拍自在线播放| 欧美精品少妇videofree| 国产免费一区二区三区在线观看| 亚洲成人久久久| 亚洲国产欧美一区二区三区同亚洲| 91精品国产91久久久久久吃药| 日韩av日韩在线观看| 青草青草久热精品视频在线观看|