五、案例-指令參考-freemarker指令、表達式

案例-指令參考描述:本人自己測試寫了一遍,如有錯的地方,懂freemarker的朋友望指點指點!

案例-指令參考

?

表達式

?

                  

一、 Assign

1、<#assign name1="北京" name2="上海" name3="廣東">
調用:${name1}、${name2}、${name3}
2、<#assign name1> 消息模擬..   </#assign>
調用:${name1}
3、<#assign name5 in my命名空間> 消息模擬.. </#assign>
調用:<#import "InstructionReference.ftl" as my命名空間>
${my.name5}

二、attempt, recover

<#attempt>=============>輸出:${my.name5}
<#recover>錯誤recover block
</#attempt>
attempt block:任意內容的模板塊。這是會被執行的, 但是如果期間發生了錯誤,那么這塊內容的輸出將會回滾,之后 recover block 就會被執行。
recover block: 任意內容的模板塊。 這個僅在 attempt block 執行期間發生錯誤時被執行。你可以在這里打印錯誤信息或其他操。

三、compress

當你使用了對空白、換行的格式(比如HTML或XML) 時壓縮指令對于移除多余的空白 
<#assign x = "    moo \n\n   ">
<#compress>1 2 3   4    5${x}test onlyI said, test only
</#compress>

四、flush

<#Flush>
說明:當 FreeMarker 生成輸出時,它通常不會立即發送到最終接收端 
(比如web瀏覽器或最終的文件),而是會將內容累積在緩沖區,
發送一個大塊的內容。 緩沖區的精確規則不是由 FreeMarker 決定的
,而是由嵌入的軟件決定的。 將緩沖區中累積的內容發送出去稱為沖洗。

五、function, return

<#function name param1 param2 ... paramN>...<#return returnValue>...
</#function>
說明:
name:方法變量的名稱(不是表達式)
param1, param2 等: 局部變量的名稱, 存儲參數的值(不是表達式),在 = 號后面和默認值 (是表達式)是可選的。
paramN,最后一個參數, 可以可選的包含一個尾部省略(...), 這就意味著宏接受可變的參數數量。局部變量 paramN 將是額外參數的序列。
returnValue: 計算方法調用值的表達式。
return 指令可以在 <#function ...></#function> 之間被用在任意位置和任意次數。
沒有默認值的參數必須在有默認值參數 (paramName=defaultValue) 之前
示例1:
<#function avg x y><#return (x + y) * 6>
</#function>
${avg (10, 20)}
示例2:
<#function avg nums...><#local sum = 0><#list nums as num><#local sum = sum + num></#list><#if nums? size = 5><#return sum / nums? size></#if>
</#function>
${avg (10, 20, 30, 40, 40)}//參數可任意個

六、global全局變量

1、<#global name1="北京2">
調用:${name1}2、<#global name1="北京" name2="上海" name3="廣東">
調用:${name1}、${name2}、${name3}3、<#global name4>消息模擬. </#global>
調用:${name4}說明:一個相同名稱的變量存在的話, 那么會隱藏由 global 指令創建的變量。

七、if, else, elseif

示例1:只有 if 沒有 elseif 和 else
<#if x == 1>x is 1
</#if>
示例2:只有 if 沒有 elseif 但是有 else
<#if x == 1>x is 1
<#else>x is not 1
</#if>
示例3:有 if 和兩個 elseif 但是沒有 else
<#if x == 1>x is 1
<#elseif x == 2>x is 2
<#elseif x == 3>x is 3
</#if>
示例4:有 if 和三個 elseif 還有 else
<#if x == 1>x is 1
<#elseif x == 2>x is 2
<#elseif x == 3>x is 3
<#elseif x == 4>x is 4
<#else>x is not 1 nor 2 nor 3 nor 4
</#if>
示例5:嵌套 if 指令
<#if x == 1>x is 1<#if y == 1>and y is 1 too<#else>but y is not</#if>
<#else>x is not 1<#if y < 0>and y is less than 0</#if>
</#if>

八、import

<#import path as hash>
說明:使用參考assign,創建一個命名空間引入然后被調用。
path模板的路徑。 這是一個算作是字符串的表達式。(換句話說,它不是一個固定的字符串, 它可以是這樣的一些東西,比如,profile.baseDir + "/menu.ftl"。)
hash訪問命名空間的哈希表變量不帶引號的名字。不是表達式。 (要引入動態創建的名字)
示例:<#import "/libs/mylib.ftl" as my>
<@my.copyright date="1999-2002"/>

九、include

<#include path><#include path options>
path包含文件的路徑;一個算作是字符串的表達式。(用其他話說, 它不用是一個固定的字符串,它也可以是像"/menu.ftl"這樣的東西。)
options一個或多個這樣的選項: encoding=encoding, parse=parse
parse: 算作是布爾值的表達式(為了向下兼容,也接受一部分字符串值)
encoding: 算作是字符串的表達式
ignore_missing: 算作是布爾值的表達式
parse:如果它為 true, 那么被包含的文件將會當作FTL來解析,否則整個文件將被視為簡單文本 (也就是說不會在其中查找 FreeMarker 的結構)。如果你忽略了這個選項, 那么它默認是 true。
encoding:被包含文件從包含它的文件繼承的編碼方式 (實際就是字符集),除非你用這個選項來指定編碼方式。 合法的名字有:ISO-8859-2,UTF-8,Shift_JIS,Big5,EUC-KR,GB2312。 
ignore_missing:當為 true,模板引用為空時壓制錯誤,而 <#include ...> 不會輸出任何東西。當為 false 時,如果模板不存在, 那么模板處理就會發生錯誤并停止。如果忽略這個選項,那么它的默認值是 false。
說明:使用它在你的模板中插入另外一個 FreeMarker 模板文件 (由 path 參數指定)。 被包含模板的輸出格式是在 include 標簽出現的位置插入的。 被包含的文件和包含它的模板共享變量,就像是被復制粘貼進去的一樣。
示例:
<#include "/common/copyright.ftl">
<#include "/common/navbar.html" parse=false encoding="Shift_JIS">

十、local

<#local name=value><#local name1=value1 name2=value2 ... nameN=valueN><#local name>capture this
</#local>說明:name在root中局部對象的名稱。它不是一個表達式。但它可以被寫作是字符串形式, 如果變量名包含保留字符,這是很有用的,比如 <#local "foo-bar" = 1>。 請注意,這個字符串沒有擴展插值(如"${foo}")。
=:賦值操作符,也可以簡寫的賦值操作符之一 (++,+= 等...),和 assign 指令 相似。value 存儲的值,是表達式。示例:它和 assign 指令 類似,但是它創建或替換局部變量。 這僅僅在宏和方法的內部定義才會有作用。
<#function Str1 nums>
<#local sum = "......."><#return sum + nums>
</#function>
調用:${Str1("測試")}            輸出:.......測試

十一、macro, nested, return

<#macro name param1 param2 ... paramN>...<#nested loopvar1, loopvar2, ..., loopvarN>...<#return>...
</#macro>
說明:
?    name: 宏變量的名稱,它不是表達式。和 頂層變量 的語法相同,比如 myMacro 或 my\-macro。 然而,它可以被寫成字符串的形式,如果宏名稱中包含保留字符時,這是很有用的, 
    比如
<#macro "foo~bar">...。 注意這個字符串沒有擴展插值(如"${foo}")。 ? param1, param2,等...: 局部變量 的名稱,存儲參數的值 (不是表達式),在 = 號后面和默認值(是表達式)是可選的。 默認值也可以是另外一個參數,
    比如
<#macro section title label=title>。參數名稱和 頂層變量 的語法相同,所以有相同的特性和限制。 ? paramN, 最后一個參數,可能會有三個點(...), 這就意味著宏接受可變數量的參數,不匹配其它參數的參數可以作為最后一個參數 (也被稱作籠統參數)。
    當宏被命名參數調用, paramN 將會是包含宏的所有未聲明的鍵/值對的哈希表。當宏被位置參數調用,
paramN將是額外參數的序列。 (在宏內部,要查找參數,可以使用 myCatchAllParam?is_sequence。) ? loopvar1, loopvar2等...: 可選的,循環變量 的值, 是 nested 指令想為嵌套內容創建的。這些都是表達式。 return 和 nested 指令是可選的,而且可以在
<#macro></#macro> 之間被用在任意位置和任意次數

示例1:標準寫法

<#macro test1>

? Test text

</#macro>

調用:<@mtest1/>

?

示例2:帶參數的宏(參數可多個)

<#macro test2 data>

? Test text:${data}

</#macro>

調用:<@test2 data="Hello"/>

?

示例3帶參數、默認參數(可多個)

<#macro test3 data1 data2="2" data3="3">

? ===>${data1}

? ===>${data2}

? ===>${data3}

</#macro>

調用:<@test3 data1="Hello" data2="Hello"/> <@test3 data1="Hello" />

示例4:集合迭代元素的宏

<#macro list title items>

? <p>${title? cap_first}: </p>

? <ul>

??? <#list items as x>

????? <li>${x? cap_first} </li>

??? </#list>

? </ul>

</#macro>

調用:<@list items=["mouse", "elephant", "python"] title="標題"/>

Nested

Nested

說明:ested 指令執行自定義指令開始和結束標簽中間的模板片段。 嵌套的片段可以包含模板中任意合法的內容示例1:標準簡單
<#macro do_twice>1. <#nested>2. <#nested>
</#macro>
調用:<@do_twice>something</@do_twice>
輸出: 
示例2:嵌套內容創建循環變量
<#macro do_thrice><#nested 1><#nested 2><#nested 3>
</#macro>
調用:<@do_thrice; x>${x} Anything.
</@do_thrice>

return

說明:可以在任意位置留下一個宏或函數定義。
<#macro test d>
This test<#return>Will not be printed${d}
</#macro>
調用:<@test d="===>"/>

十二、noparse(不解析ftl)

<#noparse>...
</#noparse>
說明:不會在這個指令體中間尋找FTL標簽, 插值和其他特殊的字符序列,除了noparse的結束標記,避開對noparse內部ftl的解析。示例1:
<#noparse><#list animals as animal><tr><td>${animal.name} <td>${animal. price} Euros</#list>
</#noparse>

十三、stop

<#stop><#stop reason>說明:reason停止對模版解析,并且拋出一個異常,終止原因的信息化消息。是表達式,被算做是字符串,中止模板處理,給出(可選的)錯誤消息。 不要在普通情況下對結束模板處理使用! FreeMarker 模板的調用者會將它視為失敗的模板呈現。

十四、switch, case, default, break

<#switch "2"><#case "1">===>;1<#break><#case "2">===>; 2<#break><#case "3">===>; 3<#break>
</#switch>
說明:value, refValue1表達式將會計算成相同類型的標量,break 和 default 是可選的。

十五、t, lt, rt

<#t>
<#lt>
<#rt>
說明:指示FreeMarker去忽略標記中行的特定的空白的移除發生在解析階段
t (整體削減):忽略本行中首和尾的所有空白。
lt (左側削減):忽略本行中首部所有的空白。
rt (右側削減):忽略本行中尾部所有的空白。

?

轉載于:https://www.cnblogs.com/xxt19970908/p/5594258.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/255063.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/255063.shtml
英文地址,請注明出處:http://en.pswp.cn/news/255063.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PartitionMotionSearch()函數

encode_one_macroblock()函數中的運動估計分為兩大塊&#xff0c;對于宏塊級的三種模式&#xff0c;分塊后直接對patition依次調用PartitionMotionSearch()函數&#xff1b;而對于亞宏塊級的&#xff08;含8x8, 8x4,4x8,4x4&#xff09;模式&#xff0c;首先將宏塊拆分為4個88子…

201521123017 《Java程序設計》第4周學習總結

1. 本周學習總結 2. 書面作業 Q1.注釋的應用 使用類的注釋與方法的注釋為前面編寫的類與方法進行注釋&#xff0c;并在Eclipse中查看。(截圖) Q2.面向對象設計(大作業1&#xff0c;非常重要) 2.1 將在網上商城購物或者在班級博客進行學習這一過程&#xff0c;描述成一個故事。…

完整的VAL3程序

start() begin//延時10秒 delay(5)//初始化變量call init()//清空原有運動堆棧resetMotion()//建立上電任務taskCreate "robotpower",100,robotpower()wait(isPowered())//建立生產任務taskCreate "ProductionCycle",10,ProductionCycle()//建立安全區域…

iOS WebView 加載本地資源(圖片,文件等)

NSString *path [[NSBundle mainBundle] pathForResource:"關于.docx" ofType:nil]; NSURL *url [NSURL fileURLWithPath:path]; NSLog("%", [self mimeType:url]); //webview加載本地文件&#xff0c;可以使用加載數據的方式 //第一個誒參數是一個N…

本文以H264視頻流為例,講解解碼流數據的步驟。

本文以H264視頻流為例&#xff0c;講解解碼流數據的步驟。 為突出重點&#xff0c;本文只專注于討論解碼視頻流數據&#xff0c;不涉及其它&#xff08;如開發環境的配置等&#xff09;。如果您需要這方面的信息&#xff0c;請和我聯系。 準備變量 定義AVCodecContext。如…

2008-2021年商業銀行數據(農商行、城商行、國有行、股份制銀行)

2008-2021年商業銀行數據&#xff08;農商行、城商行、國有行、股份制銀行&#xff09; 1、時間&#xff1a;2008-2021年 2、范圍&#xff1a;1700銀行 3 、指標&#xff1a;證券簡稱、year、證券代碼、資產總計、負債合計、所有者權益合計、利潤總額、凈利潤、貸款總額、存…

EPSON 任務同步 改寫

有時需要在多個任務執行之前來使它們同步。如果預先知道執行每項任務所需要的時間&#xff0c;它們就可以通過簡單地等待由最慢的任務產生的信號來實現同步。然而&#xff0c;如果不知道那個任務是最慢的&#xff0c;就需要使用一個更復雜的同步化機制&#xff0c;如下所示VAL …

線程池的簡單使用

創建指定線程數量的線程池 private static ExecutorService scheduledTaskFactoryExecutor null;private boolean isCancled false;private static class ThreadFactoryTest implements ThreadFactory { Overridepublic Thread newThread(Runnable r) { Thread threa…

異常--自定義異常類

為什么要調用父類構造器? http://blog.csdn.net/rockpk008/article/details/52951856 轉載于:https://www.cnblogs.com/dwj-ngu/p/6576382.html

利用ffmpeg來進行視頻解碼的完整示例代碼

&#xff08;轉&#xff09;利用ffmpeg來進行視頻解碼的完整示例代碼&#xff08;H.264&#xff09; Decode() { FILE * inpf; int nWrite; int i,p; int nalLen; unsigned char * Buf; int got_picture, consumed_bytes; unsigned char *DisplayBuf; Displ…

安卓觀看免費視頻

http://www.imooc.com/search/course?wordsAndroid%E6%94%BB%E5%9F%8E%E7%8B%AE%E7%AC%AC%E4%B8%80%E8%AF%BE&page3 http://www.imooc.com/course/list?candroid&src360onebox http://www.bilibili.com/video/av2788563/index_4.html http://www.imooc.com/course/pr…

EtherCAT 網站鏈接

http://www.ethercat.org.cn/cn.htm EtherCAT技術介紹 EtherCAT系統組成和工作原理 EtherCAT采用主從式結構&#xff0c;主站PC機采用標準的100Base-TX以太網卡&#xff0c;從站采用專用芯片。系統控制周期由主站發起&#xff0c;主站發出下行電報&#xff0c;電報的最大有效數…

IEC 6-1131/3的5種標準編程語言

用于開發控制系統和商業管理系統的TRACE MODE6編程工具面向不同領域的軟件工程師. TRACE MODE6包含的五種編程語言為&#xff1a;Techno SFC、Techno LD、Techno FBD、Techno ST和Techno IL. 這些語言是下列IEC 6-1131/3標準語言的擴展&#xff1a; SFC&#xff08;順序功能圖…

ngRx 官方示例分析 - 4.pages

Page 中通過構造函數注入 Store&#xff0c;基于 Store 進行數據操作。 注意 Component 使用了 changeDetection: ChangeDetectionStrategy.OnPush. OnPush means that the change detectors mode will be set to CheckOnce during hydration. /app/containers/collection-page…

用ffmpeg把yuv格式轉化為mpeg格式

http://blog.sina.com.cn/s/blog_5f5ad6a90100cs5k.html

方法:查詢MongoDB數據庫中最新一條數據(JAVA)

使用JAVA語言查詢MongoDB中某個數據庫某個集合的最新一條數據&#xff1a; MongoCollection<Document> cpu MongoClient.getDatabase("sysmgr").getCollection("cpu"); //獲取所需集合 Document dbo cpu.find().sort(descending("time"…

NoPause/NoEmgAbort的任務 與后臺任務的區別

NoPause/NoEmgAbort的任務示例 下面的例子顯示了一個程序&#xff0c;可以監視控制器的錯誤并根據錯誤編號在發生錯誤時切換I/O On/Off。 Function main Xqt ErrorMonitor, NoEmgAbort : FendFunction ErrorMonitor Wait ErrorOnIf 4000 < SysErr And Syserr < 5999 T…

30分鐘搞定后臺登錄界面(103個后臺PSD源文件、素材網站)(轉)

出處&#xff1a;http://www.cnblogs.com/best/p/6582294.html 目錄 一、界面預覽二、PSD源文件預覽三、工具分享四、資源說明五、素材下載網站六、下載去年八月時要做一個OA系統為了后臺界面而煩惱&#xff0c;后來寫了一篇博客&#xff08;《后臺管理UI的選擇》&#xff09;介…

Linux 查看服務器開放的端口號

在討論這個問題前&#xff0c;我們先來了解一下物理端口、邏輯端口、端口號等計算機概念。 端口相關的概念&#xff1a; 在網絡技術中&#xff0c;端口&#xff08;Port&#xff09;包括邏輯端口和物理端口兩種類型。物理端口指的是物理存在的端口&#xff0c;如ADSL Modem、集…