国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

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

FreeMarker筆記 第三章 模板

2019-11-14 21:09:05
字體:
來源:轉載
供稿:網友
FreeMarker筆記 第三章 模板

小兔子小兔子小兔子小兔子小兔子小兔子小兔子小兔子小兔子小兔子小兔子小兔子小兔子小兔子,先來一打小白兔;

3.1 總體結構

用程序語言編寫的程序就是模板,模板也被成為FTL(代表FreeMarker模板語言)。

模板是由如下部分混合而成的:

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

FTL區分大小寫;

FTL標簽不可以在其他FTL標簽和插值中使用,下面這樣寫是錯的;

<#if <#include 'foo'>='bar'>...</#if>

注釋可以放在FTL標簽和插值中間;3.2 指令

標簽分為兩種:

  • 開始標簽:<#directivename parametes>
  • 結束標簽:

指令有兩種類型:預定義指令和用戶自定義指令。對于用戶自定義的指令使用@來代替#;3.3 表達式3.3.1 簡介

${exPRession}3.3.2 快速瀏覽(備忘單)

這里是給已經了解FreeMarker的人或有經驗的程序員的一個提醒:

2014-09-05_102721[5]

2014-09-05_102818[5]

2014-09-05_102848[5]3.3.3 直接確定值3.3.3.1 字符串

轉義

${"It's /"quoted/" and this is a blackslash: //"}

輸出:

It's "quoted" and this is a blackslash: /

轉義序列表:

2014-09-05_104052[4]

在1-4位的16進制碼。下面這個示例中都是在字符串中放置版權符號“/xA9 1999-2001”,“/x0A9 1999-2001”,“/x00A9 1999-2001”;

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

${r"${foo}"}${r"C:/foo/bar"}

將會打印:

${foo}C:/foo/bar
實例
    <ul>        <li>轉義:${"It's /"quoted/" and this is a blackslash: //"}</li>        <li>版權符號:${"/xA9 1999-2000"}</li>        <li>原生字符串:${r"${foo}"}</li>    </ul>

輸出:

2014-09-09_152545[4]3.3.3.2 數字

科學記數法暫不支持使用(1E3就是錯誤的)。不能在小數點之前不寫0(.5也是錯誤的);3.3.3.3 布爾值

直接寫true或false就表示一個布爾值了;3.3.3.4 序列

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

<#list ["winter", "spring", "summer", "autumn"] as x>${x}</#list>

將會打印出:

winterspringsummerautumn

列表中的項目是表達式,那么也可以這樣做:[2+2, [1,2,3,4], “whatnot”],其中第一個子變量是數字4,第二個子變量是一個序列,第三個子變量是字符串“whatnot”。

也可以用start..end定義存儲數字范圍的序列,這里start和end是處理數字值表達式,比如2..5和[2, 3, 4, 5]是相同的,但是使用前者會更有效率(內存占用少而且速度快)。可以看出前者也沒有使用方括號,這樣也可以用來定義遞減的數字范圍,比如5..2。(此外,還可以省略end,只需5..即可,到無窮大)。實例

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

    <#assign season=["summer", "winter", "spring", "autumn"]>    <p>        <#list season as s>            ${s},        </#list>    </p>    <p>        <#list season[2..] as x>            ${x},        </#list>    </p>

輸出:

summer, winter, spring, autumn, spring, autumn, 
3.3.3.5 哈希表

鍵和值成對出現并以冒號分隔。{“name”:“green mouse”,“price”:150};3.3.4 檢索變量3.3.4.1 頂層變量3.3.4.2 從哈希表中檢索數據

2014-09-05_111603[4]

book.author.name來讀取到auther的name;

如果我們想指定同一個表達式的子變量,那么還有另外一種語法格式:book[“title”]。

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

當使用點式語法時,頂層變量名的命名也是相同的限制(命名時只能使用字母,數字,下劃線,$,@等),而使用方括號語法形式時就沒有這樣的限制,它可以是任意的表達式。(為了FreeMarker支持xml,如果變量名是*(星號)或者**,那么就應該使用方括號語法格式)。3.3.4.3 從序列中檢索數據

animals[0].name3.3.4.4 特殊變量

特殊變量是由FreeMarker引擎本身定義的,為了使用它們,可以按照如下語法形式來進行:.variable_name;3.3.5 字符串操作3.3.5.1 插值(或連接)3.3.5.2 獲取一個字符

user[0],假設user是”Big Joe“,那么

${user[0]}${user[4]}

將會打印:

BJ

可以使用切分序列的方式來獲取一定范圍內的字符,比如user[1..4]{user[4..]},然而這種使用方法已經被廢棄了,作為它的替代,可以使用內建函數substring。實例

/FreeMarker-hello-web/src/main/webapp/WEB-INF/ftl/3/string.ftl

        <ul>            <li>讀取一個字符:${user[0]}</li>            <li>讀取一定范圍的字符:${user[1..5]}</li>            <li>這種操作已經廢棄了,現在使用內建函數substring,${user?substring(1, 5)}</li>        </ul>

輸出:

?讀取一個字符:B?讀取一定范圍的字符:ig Jo?這種操作已經廢棄了,現在使用內建函數substring,ig J
3.3.6 序列操作3.3.6.1 連接

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

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

要注意不要在很多重復連接時使用序列連接操作,比如在循環中往序列上追加項目,通過這種方式進行的許多重復連接最終產生的序列讀取的速度會變慢;3.3.6.2 序列切分

使用[firstindex..lastindex]可以獲取序列中的一部分,這里的firstindex和lastindex表達式的結果是數字,如果seq存儲序列“a”,“b”,“c”,“d”,“f”,那么表達式seq[1..4]將會是含有“b”,“c”,“d”,“e”的序列。實例

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

    <h3>序列的操作</h3>    <ul>        <li>+連接:            <#list ["sumer", "winter"]+["spring", "autumn"] as x>                ${x}.            </#list>        </li>        <li>序列切分:            <#list season[2..3] as x>            ${x},        </#list>        </li>    </ul>
3.3.7 哈希表操作3.3.7.1 連接

可以使用+號連接哈希表

<#assign ages = {"Joe":23, "Fred":25} + {"Joe":30, "Julia":18}>
3.3.8 算數運算

求模(求余): %3.3.9 比較運算

測試兩個值相等使用=(或者==,二者是完全等同的)3.3.10 邏輯操作3.3.11 內建函數

內建函數以?形式提供變量的不同形式或者其他信息。

例如得到字符串的大寫形式:user?upper_case;

字符串使用的內建函數:

  • html:字符串中所有的特殊HTML字符都需要用實體引用來代替(比如<代替<)。
  • cap_first:字符串的第一個字母變為大寫形式;
  • lower_case:字符串的小寫形式;
  • upper_case:字符串的大寫形式;
  • trim:去掉字符串首尾的空格;

序列使用的內建函數:

  • size:序列中的元素的個數

數字使用的內建函數:

  • int:數字的整數部分(比如-1.9?int就是-1)

示例:

${test?html}${test?upper_case?html}

輸出是:

Tom &amp; JerryTOM &amp; JERRY
3.3.12 方法調用

假設程序員定義了一個可供調用的方法repeat。第一個參數字符串類型,第二個參數是數值類型。

${repeat("What", 3)}

打印出:

WhatWhatWhat
3.3.13 處理不存在的值

要注意這個操作是FreeMarker2.3.7版本以后才有的(用來代替內建函數default,exists和if_exists);3.3.13.1 默認值

unsafe_expr!default_expr或 unsafe_expr! 或 (unsafe_expr)!default_expr 或 (unsafe_expr)!

${mouse!"No mouse."}<#assign mouse="Jerry">${mouse!"No mouse."}

將會輸出:

No mouse.Jerry

默認值可以是任何類型的表達式,也可以不必是字符串。

hits!0;colors!["red", "green", "blue"]

默認值表達式的復雜程序沒有嚴格限制,你可以這么來寫:

cargo.weight!(item.weight * itemCount+10)

如果默認值被忽略了,那么結果將會是空串,空序列或空哈希表。

(${mouse!})<#assign mouse = "Jerry">(${mouse!})

輸出為:

()(Jerry)

在不是頂層變量時,默認的操作符可以有兩種方式:

product.color!"red"

當color不存在時(返回“red”)將會被處理,但是如果連product都不存在時將不會處理,也就是說這種寫法product必須存在,否則模板就會報錯。

(product.color)!"red"

這種寫法,如果product不存在或者product存在而color不存在,都能顯示默認值“red”而不會報錯。

默認值操作也可以作用于序列,比如:

<#assign seq = ['a', 'b']>${seq[0]!'-'}${seq[1]!'-'}${seq[2]!'-'}${seq[3]!'-'}

輸出為:

ab/-/-
3.3.13.2 檢測不存在的值

unsafe_expr??或者(unsafe_expr)??

<#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 foundCreating mouse...Mouse found
3.3.14 括號3.3.15 表達式中的空格

FTL忽略表達式中的多余空格。3.3.16 操作符的優先級3.4 插值

項目
  1. P1:https://github.com/yejq/FreeMarker-hello-java.git。
  2. P2:https://github.com/yejq/FreeMarker-hello-web.git。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 莆田市| 通海县| 宝丰县| 中西区| 佛山市| 凤凰县| 东至县| 中方县| 阳信县| 和平区| 汶川县| 平度市| 靖宇县| 南汇区| 突泉县| 正阳县| 民和| 朝阳市| 冷水江市| 谷城县| 宜宾市| 云龙县| 安丘市| 边坝县| 四子王旗| 定日县| 张家港市| 崇阳县| 封丘县| 镇安县| 高雄县| 莫力| 云浮市| 教育| 闽侯县| 桓台县| 兰考县| 汾西县| 怀安县| 乌兰县| 碌曲县|