• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • freemarker 模板

    1 總體結構

    模板(FTL 編程)是由如下部分混合而成的:
    Text 文本:文本會照著原樣來輸出。
    Interpolation 插值:這部分的輸出會被計算的值來替換。插值由${和}所分隔(或者#{和},這種風格已經不建議再使用了)。
    FTL tags 標簽:FTL 標簽和 HTML 標簽很相似,但是它們卻是給 FreeMarker 的指示,而且不會打印在輸出內容中。
    Comments 注釋:FTL 的注釋和 HTML 的注釋也很相似,但它們是由<#--和-->來分隔的。注釋會被 FreeMarker 所忽略,更不會在輸出內容中顯示。


    2 指令

    使用 FTL 標簽來調用 directives 指令,比如調用 list 指令。

    指令有兩種類型:預定義指令和用戶自定義指令。對于用戶自定義的指令使用@來代替#

    更深的區別在于如果指令沒有嵌套內容,那么必須這么使用 <@mydirective parameters />而預定義指定則為<#directive something>

    FreeMarker 可以不需要#來理解預定義指令(比如<if user == "Big Joe">...</if>)。而我們不建議這樣來使用。


    3 表達式
    當需要給插值或者指令參數提供值時,可以使用變量或其他復雜的表達式。例如,我們設 x 為 8,y 為 5,那么(x+y)/2 的值就會被處理成數字類型的值 6.5

    當給插值提供值時:插值的使用方式為${expression}

    當給指令參數提供值時:在入門章節我們已經看到 if 指令的使用了。這個指令的語法是:<#if expression>...</#if>。這里的表達式計算結果必須是布爾類型的。


    快速瀏覽(備忘單)



    直接確定值

    _1 字符串

    如果文本本身包含用于字符引用的引號(雙引號”或單引號’)或反斜杠時,應該在它們的前面再加一個反斜杠,這就是轉義。轉義允許你直接在文本中輸入任何字符,也包括反斜杠。

    下面的表格是 FreeMarker 支持的所有轉義字符。



    原生字符串:在原生字符串中,反斜杠和${沒有特殊的含義,它們被視為普通的字符。為了表明字符串是原生字符串,在開始的引號或單引號之前放置字母 r,例如:

    ${r"${foo}"} 
    ${r"C:\foo\bar"} 
    
    將會打印:
    ${foo} 
    C:\foo\bar

    _2 數字輸入不帶引號的數字就可以直接指定一個數字,必須使用點作為小數的分隔符而不能是
    其他的分組分隔符。

    _3 布爾值 直接寫 true 或 false 就表征一個布爾值了,不需使用引號。


    _4 序列
    指定一個文字的序列,使用逗號來分隔其中的每個子變量,然后把整個列表放到方括號中。例如:

    <#list ["winter", "spring", "summer", "autumn"] as x> 
    ${x} 
    </#list>
    列表中的項目是表達式,那么也可以這樣做:[2 + 2, [1, 2, 3, 4], "whatnot"],其中第一個子變量是數字 4,第二個子變量是一個序列,第三個子變量是字符串”whatnot”。 也可以用 start..end 定義存儲數字范圍的序列,這里的 start 和 end 是處理數
    字值表達式,比如 2..5 和[2, 3, 4, 5]是相同的,但是使用前者會更有效率(內存占用少而且速度快)。可以看出前者也沒有使用方括號,這樣也可以用來定義遞減的數字范圍,比如 5..2。(此外,還可以省略 end,只需 5..即可,但這樣序列默認包含 5,6,7,8
    等遞增量直到無窮大)

    _5 哈希表
    在模板中指定一個哈希表,就可以遍歷用逗號分隔開的“鍵/值”對,把列表放到花括號內。鍵和值成對出現并以冒號分隔。看這個例子:{"name":"green mouse", "price":150}。注意到名字和值都是表達式,但是用來檢索的名字就必須是字符串類型的。

    4 檢索變量
    _1 頂層變量

    為了訪問頂層的變量,可以簡單地使用變量名。


    _2 從哈希表中檢索數據

    如果有一個表達式的結果是哈希表,那么我們可以使用點和子變量的名字得到它的值.

    下面這些示例它們含義都是相等的:book.author.name, book["author"].name, book.author.["name"], book["author"]["name"]

    如果我們想 指 定 同一個表達式 的 子變量,那么還有另外一種語法格式 :在方括號中可以給出任意長度字符串的表達式。在上面這個數據模型示例中你還可以這么來獲取 title:book[test] :這里的test是根元素test中的值.

    _3 從序列中檢索數據

    這和從哈希表中檢索是相同的,但是你只能使用方括號語法形式來進行,而且方括號內的表達式最終必須是一個數字而不是字符串。在第一章的數據模型示例中,為了獲取第一個動物的名字(記住第一項數字索引是 0 而不是 1)可以這么來寫:animals[0].name。


    _4 特殊變量

    特殊變量是由 FreeMarker 引擎本身定義的,為了使用它們,可以按照如下語法形式來
    進行:.variable_name。
    通常情況下是不需使用特殊變量,而對專業用戶來說可能用到。所有特殊變量的說明可
    以參見參考手冊。


    5 字符串操作

    _1 插值(或連接)

    可以在字符串的文字中使用${…}(#{…})。${...}的作用和在文本區的是相同的。

    也可以使用+號來達到類似的效果,這是比較老的方法,也叫做字符串連接。


    _2 獲取一個字符

    user[0]

    獲取一定范圍內的字符,比如${user[1..4]}和${user[4..]}。然而現在這種使用方法已經被廢棄了,作為它的替代,可以使用內建
    函數 substring,

    6 序列操作
    _1 連接

    序列的連接可以使用+號來進行,例如:

    <#list ["Joe", "Fred"] + ["Julia", "Kate"] as user> 
    - ${user} 
    </#list> 
    
    - Joe 
    - Fred 
    - Julia 
    - Kate 

    _2 序列切分

    使 用 [firstindex..lastindex] 可 以 獲 取 序 列 中的一部分 ,這里的firstindex 和lastindex 表達式的結果是數字。如果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"的序列。

    7 哈希表操作
    _1 連接

    像連接字符串那樣,也可以使用+號的方式來連接哈希表。如果兩個哈希表含有鍵相同的項,那么在+號右側的哈希表中的項目優先。

    <#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

    8 算數運算
    有時我們只想獲取計算結果的整數部分,這可以使用內建函數 int 來解決。
    ${(x/2)?int} 
    ${1.1?int} 
    ${1.999?int} 
    ${-1.1?int} 
    ${-1.999?int} 
    

    9 比較運算
    測試兩個值相等使用=(或者采用 Java 和 C 語言中的==,二者是完全等同的。) 測試兩個值不等使用!=。

    FreeMarker 解釋>的時候可以把它當作 FTL 標簽的結束符。為了避免這種問題,不得不將表達式放到括號內:<#if (x > y)>,或者可以在比較關系處使用>和<:<#if x > y>。可以使用 lt 代替<,lte代替<=,gt 代替>,gte 代替>=, 由于歷史遺留的原因,FTL 也支持\lt, \lte, \gt 和 \gte,使用他們和使用不帶反斜杠的效果一樣。

    10 邏輯操作

    11 內建函數
    內建函數以?形式提供變量的不同形式或者其他信息。使用內建函數的語法和訪問哈希表子變量的語法很像,除了使用?號來代替
    點,其他的都一樣。例如得到字符串的大寫形式:user?upper_case。

    示例:
    ${test?html} 
    ${test?upper_case?html} 
    
    假設字符串 test 存儲”Tom & Jerry”,那么輸出為:
    Tom & Jerry 
    TOM & JERRY 
    

    12 方法調用
    ${repeat("What", 3)} 
    
    將會打印出:
    WhatWhatWhat 

    13 處理不存在的值

    _1 默認值
    使用形式 概 覽 : unsafe_expr!default_expr 或 unsafe_expr! 或(unsafe_expr)!default_expr 或(unsafe_expr)!
    這個操作符允許你為可能不存在的變量指定一個默認值。

    例如,假設下面展示的代碼中沒有名為 mouse 的變量:

    ${mouse!"No mouse."} 
    <#assign mouse="Jerry"> 
    ${mouse!"No mouse."}
    將會輸出
    No mouse. 
    Jerry 
    
    默認值可以是任何類型的表達式,也可以不必是字符串。你也可以這么寫:hits!0或 colors!["red", "green", "blue"]。默認值表達式的復雜程度沒有嚴格限制,你還可以這么來寫:cargo.weight!(item.weight * itemCount + 10) 。

    _2 檢測不存在的值
    使用形式概覽:unsafe_expr??或(unsafe_expr)?? 這個操作符告訴我們一個值是否存在。基于這種情況,結果是 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

    14 括號
    括號可以用來給表達式分組。示例如下:
     <#-- 輸出是: --> 
    ${3 * 2 + 2} <#-- 8 --> 
    ${3 * (2 + 2)} <#-- 12 --> 
    ${3 * ((2 + 2) * (1 / 2))} <#-- 6 --> 
    ${"green " + "mouse"?upper_case} <#-- green MOUSE --> 
    ${("green " + "mouse")?upper_case} <#-- GREEN MOUSE --> 
    <#if !( color = "red" || color = "green")> 
     The color is nor red nor green 
    </#if> 
    

    15 表達式中的空格
    FTL 忽略表達式中的多余空格

    16 操作符的優先級

    插值
    插值的使用語法是:${expression},expression 可以是所有種類的表達式(比如${100 + x})。
    插值是用來給插入具體值然后轉換為文本(字符串)。插值僅僅可以在兩種位置使用:
    文本區(如<h1>Hello ${name}!</h1> )和字符串表達式(如<#include "/footer/${company}.html">)中。

    如果插值在文本區(也就是說,不再字符串表達式中),如果 escapse 指令起作用了,即將被插入的字符串會被自動轉義。

    <#escape x as x?html> 
     ... 
     <p>Title: ${book.title}</p> 
     <p>Description: 
    <#noescape>${book.description}</#noescape></p> 
     <h2>Comments:</h2> 
     <#list comments as comment> 
     <div class="comment"> 
     ${comment} 
     </div> 
     </#list> 
     ... 
    </#escape>







    版權聲明:本文為iteye_8785原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/iteye_8785/article/details/82600012

    智能推薦

    freemarker模板引擎

    一。 freemarker簡介     在互聯網軟件內容網站中 一般首頁的訪問量大,為了提供首頁的訪問效率,一般 首頁的內容以及其中的新聞等信息都可以實現html靜態化 瀏覽器訪問時 設置瀏覽器的緩存策略和生成靜態頁面的周期一致 可以使訪問效率大大提升 同時配合cdn處理圖片 js css等資源 可以在首頁訪問時 理論完全脫離數據庫  降低應用壓力   原理...

    FreeMarker模板引擎

    課程介紹 了解模板引擎 掌握FreeMarker常用語法 在servlet中使用freeMarker 什么是模板引擎 數據 + 模板 = 結果 模板引擎將數據與展現有效的解耦 主流模板引擎 JSP FreeMarker Beetl : Beetl是Bee Template Language的縮寫,它絕不是簡單的另外一種模板引擎, 而是新一代的模板引擎,它功能強大,性能良好,超過當前流行的模板引擎。...

    基于FreeMarker導出模板

    今天,來簡單介紹一下基于freemarker來導出Excel 基于FreeMarker導出模板 引入maven依賴 構造freemarker模板 創建目標Excel 處理模板數據 構建數據實體 4、導出操作 總結 引入maven依賴 我這里是用的Spring-Boot項目,首先引入依賴 構造freemarker模板 創建目標Excel 首先,我們先手工創建一個我們需要的Excel文件 然后選擇文件...

    Thymeleaf模板和Freemarker模板

    Thymeleaf模板 關于Thymeleaf的優點,我只說一條:它就是html頁面。 導入pom依賴 pring Boot官方文檔建議在開發時將緩存關閉,那就在application.yml文件中加入下面這行 正式環境還是要將緩存開啟的 User ThymeleaController list.html head2 Freemarke FreeMarker 是一款模板引擎, 即一種基于模板和要改...

    springboot模板(Thymeleaf模板,freemarker模板)

    文章目錄 Thymeleaf模板 Freemarker模板 Thymeleaf模板 關于Thymeleaf的優點,我只說一條:它就是html頁面。thymeleaf模板和freemarker模板都一套可以替代JSP開發的一套引擎模板,它可以生成靜態頁面,可以讓美工在瀏覽器查看頁面的靜態效果,也可以讓程序員在服務器查看帶數據的動態頁面效果。這是由于它支持 html 原型,然后在 html 標簽里增加...

    猜你喜歡

    SpringBoot模板之thymeleaf模板,freemarker模板

    1、springboot之thymeleaf模板 ①相關pom依賴(如果創建時勾選了,就不需要了)   Spring Boot官方文檔建議在開發時將緩存關閉,那就在application.properties文件中加入下面這行 spring.thymeleaf.cache=false(可以避免緩存帶來問題,正式環境還是要將緩存開啟的) ②thymeleaf模板的話直接就是html頁面 要...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    精品国产乱码久久久久久蜜桃不卡