【正文】
lse、循環(huán)結構 l 在模板中創(chuàng)建和改變變量 l 幾乎在任何地方都可以使用復雜表達式來指定值 l 命名的宏,可以具有位置參數(shù)和嵌套內容 l 名字空間有助于建立和維護可重用的宏庫,或者將一個大工程分成模塊,而不必擔心名字沖突 l 輸出轉換塊:在嵌套模板片段生成輸出時,轉換HTML轉義、壓縮、語法高亮等等;你可以定義自己的轉換 快速入門(1)模板 + 數(shù)據模型 = 輸出l FreeMarker基于設計者和程序員是具有不同專業(yè)技能的不同個體的觀念l 他們是分工勞動的:設計者專注于表示——創(chuàng)建HTML文件、圖片、Web頁面的其它可視化方面;程序員創(chuàng)建系統(tǒng),生成設計頁面要顯示的數(shù)據l 經常會遇到的問題是:在Web頁面(或其它類型的文檔)中顯示的信息在設計頁面時是無效的,是基于動態(tài)數(shù)據的l 在這里,你可以在HTML(或其它要輸出的文本)中加入一些特定指令,F(xiàn)reeMarker會在輸出頁面給最終用戶時,用適當?shù)臄?shù)據替代這些代碼l 下面是一個例子:htmlhead titleWele!/title/headbody h1Wele ${user}!/h1 pOur latest product: a href=${}${}/a!/body/html 216。titleWele!/title[BR]/head[BR]body[BR]namethesebeing[BR]/list[BR]=39。 some ment... animals asas[BR]Euros[BR]/list${39。n 下面是支持的轉義序列:轉義序列含義\雙引號(u0022)\39。輸出的結果是:winterspringsummerautumnn 列表的項目是表達式,所以可以有下面的例子:[2 + 2, [1, 2, 3, 4], whatnot]n 可以使用數(shù)字范圍定義數(shù)字序列,例如2..5等同于[2, 3, 4, 5],但是更有效率,注意數(shù)字范圍沒有方括號n 可以定義反遞增的數(shù)字范圍,如5..2216。 特殊變量:FreeMarker內定義變量,l 字符串操作216。 l 算術運算216。 使用=(或==,完全相等)測試兩個值是否相等,使用!= 測試兩個值是否不相等216。(and)、||(or)、!(not),只能用于布爾值,否則會產生錯誤216。 序列使用的:n size:獲得序列中元素的數(shù)目216。 l 操作符優(yōu)先順序操作符組操作符后綴[subvarName] [subStringRange] . (methodParams)一元+expr、expr、!內建?乘法*、 / 、%加法+、關系、=、=(lt、lte、gt、gte)相等==(=)、!=邏輯andamp。輸出結果是:$$42$4,200%216。 輸出的結果類似下面的格式:20030408 21:24:44 Pacific Daylight TimeTue, Apr 8, 39。 M2} 4 {x。雜項(1)用戶定義指令l 宏和變換器變量是兩種不同類型的用戶定義指令,它們之間的區(qū)別是宏是在模板中使用macro指令定義,而變換器是在模板外由程序定義,這里只介紹宏l 基本用法216。輸出結果是: font size=+2Hello Fred!/font and font size=+2Hello Batman!/font 其中參數(shù)的次序是無關的,因此下面是等價的:greet color=black person=Fred/216。 這樣使用該宏變量:borderThe bordered text/border輸出結果: table border=4 cellspacing=0 cellpadding=4trtd The bordered text /tr/td/table lifont size=+2Hello Joe!/font 例子:macro repeat count list 1..count as x nested x, x/2, x==count /list/macrorepeat count=4 。macro test 2. ${x} we still see the plain var. here local x = local 3. ${x} now the local var. hides it list [loop] as x 4. ${x} now the loop var. hides the local var. /list 5. ${x} now we see the local var. again /macro 使用import指令導入庫到模板中,F(xiàn)reemarker會為導入的庫創(chuàng)建新的名字空間,并可以通過import指令中指定的散列變量訪問庫中的變量:import /lib/ as myassign mail=fred date=19992002/${}${mail}Freemarker 幾個比較實用的例子 /script 輸出: script alert(Readonly\39。, 39。, 39。] list seq?chunk(4) as row ul lilist row as cell${cell} /list/li /ul /list list seq?chunk(4, 39。) as row tr tdlist row as cell${cell} /list/td /tr /list 輸出: ul lia/li lib/li lic/li lid/li /ul ul lie/li lif/li lig/li lih/li /ul ul lii/li lij/li /ul tr tda/td tdb/td tdc/td tdd/td /tr tr tde/td tdf/td tdg/td tdh/td /tr tr tdi/td tdj/td td/td td/td /tr平常在使用的時候,如果需要排序,一般是通過DAO層實現(xiàn),如果要隨時更改排序方式,確實有些不便。, 39。, 39。 /script :default 用途: 用于處理默認值 模本: User: ${?default(Anonymous)} td${()?default( 可以使用assign指令在導入的名字空間中創(chuàng)建或替代變量,下面是一個例子:import /lib/ as my${}assign mail=jsmith in my${} 可以看到例子中使用的兩個同名變量并沒有沖突,因為它們位于不同的名字空間l 內部循環(huán)變量隱藏同名的外部循環(huán)變量,如:list [loop 1] as x ${x} list [loop 2] as x ${x} list [loop 3] as x ${x} /list ${x} /list ${x}/list輸出結果: loop 1 loop 2 loop 3 loop 2 loop 1l 輸出結果: 1. 2. 1 3. 4. 2 Last! /tr/td/table nested指令可以被多次調用,例如:macro do_thrice nested nested nested/macrodo_thrice Anything./do_thrice 可以在