FreeMarkermacro宏的使用_第1頁(yè)
FreeMarkermacro宏的使用_第2頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、FreeMarker macro 宏的使用 FreeMarker macro(宏)的使用.txtl4熱情是一種巨大的力呈:,從心靈內(nèi)部迸發(fā)而出,激勵(lì)我 們發(fā)揮出無(wú)窮的智慧和活力:熱情是一根強(qiáng)大的支柱,無(wú)論而臨怎樣的困境,總能催生我們 樂(lè)觀的斗志和頑強(qiáng)的毅力沒(méi)有熱情,生命的天空就沒(méi)的色彩。FreeMarker macro(宏)的 使用 有人說(shuō)用freemarker,但沒(méi)有用到它的宏(macro),就=沒(méi)有真正用過(guò)freemarker。說(shuō)的就 是宏是freemarker的一大特色。 宏的立義可以查看相關(guān)的文檔, 里面介紹得很淸楚, 下面來(lái)看看它的一個(gè)用法(javaeye 帖子里有討論)。 /WEB

2、一INF/template/common/common f11: $ title 然后在 freemarker. properties 里左義: autoimport/WEB-INF/template/common/common, f11 as c 然后其他的ftl文件就可以使用它了 test ftl: 你的內(nèi)容 如果不在freemarker. properties里泄義,可以在每個(gè)文件里包含這個(gè)ftl: 不同的場(chǎng)合有不同的運(yùn)用。使用得好的話,將會(huì)大大廿省你的開(kāi)發(fā)時(shí)間。FreeMarker macro 宏的使用 macro, nested, return 語(yǔ)法 return 用例 macro

3、test foo bar二Bar baaz=-l Test text, and test test test bar二b/ baaz=5*5-2/ foo二a/ Tes text, and the params: a, b, 23 Test text, and the params: a, b, -1 Test text, and the params: a, Bar, Tes text, and the params: a, Bar, 輸出 左義循環(huán)輸出的宏 23 -1 items macro list title Stitle?cap_first: Sx?cap_first list it

4、ems二mouse, elephant, python title二Animals/ 輸岀結(jié)果 Animals: Mouse Elephant Python FreeMarker macro 宏的使用 包含body的去 macro repeat count #1ist 1count as x $c $halfc Last! 輸岀 1. 0.5 2. 1 3. 1.5 4. 2 Last! 注意在使用的時(shí)候:別忘了雙引號(hào)。 mport ,z/pagelibs/bookfas book 宏 Macro 宏是在模板中使用macro指令左義 1. 1基本用法 宏是和某個(gè)變量關(guān)聯(lián)的模板片斷,以便在模板中

5、通過(guò)用戶左義指令使用該變量,下而是一個(gè) 例子: macro greet Hello Joe! 調(diào)用宏時(shí),與使用FreeMarker的荘他指令類似,只是使用替代FTL標(biāo)記中的軋 # 在macro指令中可以在宏變量之后泄義參數(shù),如: Hello Sperson! 可以這樣使用這個(gè)FreeMarker macro 宏的使用 宏變量: 但是下面的代碼具有不同的意思: 這意味著將Fred變量的值傳給person參數(shù),該值不僅是字符串,還可以是苴它類型,甚至 是復(fù)雜的表達(dá)式。 宏可以有多參數(shù),下而是一個(gè)例子: macro greet person color Hello $ person! 可以這樣使用該

6、宏變量,其中參數(shù)的次序是無(wú)關(guān)的: greet person二Fred color二black/ 可以在泄義參數(shù)時(shí)指左缺省值,否則,在調(diào)用宏的時(shí)候,必須對(duì)所有參數(shù)賦值: #macro greet person color二blackHello $ person ! 注意:宏的參數(shù)是局部變量,只能在宏左義中有效。 嵌套內(nèi)容 FreeMarker的宏可以有嵌套內(nèi)容,指令會(huì)執(zhí)行宏調(diào)用指令開(kāi)始和結(jié)朿標(biāo)記之間的 模板片斷,舉一個(gè)簡(jiǎn)單的例子: 執(zhí)行宏調(diào)用: The bordered text 輸出結(jié)果: The bordered text 指令可以被多次調(diào)用,每次都會(huì)執(zhí)行相同的內(nèi)容。 macro do_th

7、rice nested Anything FMPP輸岀結(jié)果: Anything Anything Anything FreeMarker macro 宏的使用 嵌套內(nèi)容可以是有效的FTL,下而是一個(gè)有些復(fù)雜的例子,我們將上而三個(gè)宏組合起來(lái): greet person二 輸出結(jié)果: Hello Joe!font size二+2Hello Joe!Hello Joe! 宏左義中的局部變量對(duì)嵌套內(nèi)容是不可見(jiàn)的,例如: macro repeat count #local y = test $y S count/S x: $y?default(?) $x?default (?) $count?defau

8、lt(?) 輸出結(jié)果: test 3/1: ? ? ?test 3/2: ? ? ?test 3/3: ? ? ? 在宏定義中使用循環(huán)變量 nestted指令也可以有循環(huán)變量(循環(huán)變量的含義見(jiàn)下節(jié)),調(diào)用宏的時(shí)候在宏指令的參數(shù)后 而依次列出循環(huán)變量的名字,格式如下: 例如: macro repeat count $c $halfc Last! 這里count是宏的參數(shù),c, halfc, last則為循環(huán)變量,輸出結(jié)果: 1. 0.5 2 1 3 1.5 4 2 Last! 循環(huán)變量和宏標(biāo)記指泄的不同不會(huì)有問(wèn)題,如果調(diào)用時(shí)少指定了循環(huán)變量,那么多余的值不 可見(jiàn)。調(diào)用時(shí)多指泄了循環(huán)變量,多余的循

9、環(huán)變量不會(huì)被創(chuàng)建: Sc $ halfc Last! Sc. $ halfc Just repeat it. 在模板中定義變量 在模板中怎義的變量有三種類型: plain變量:可以在模板的任何地方訪問(wèn),包括使用include指令插入的模板,使用assign 指令創(chuàng)建和替換。 局部變量:在宏泄義體中有效,使用local指令創(chuàng)建和替換。 循環(huán)變量:只能存在于指令的嵌套內(nèi)容,由指令(如list)自動(dòng)創(chuàng)建;宏的參數(shù)是局部變量, 而不是循環(huán)變量 局部變量隱藏(而不是覆蓋)同名的plain變量:循環(huán)變量隱藏同名的局部變雖:和plain變 FreeMarker macro 宏的使用 量.下面是一個(gè)例子: #

10、assign x = plainS x 6 $x 7 $x assign x = plain2 8 $ x 9 $x hmacro test 2 Sx # we still see the plain var here 一一 #local x = local 3 $x ist loop as x 4 $x #一一 now the loop var hides the local var 一- 5 Sx 輸岀結(jié)果: 1 plain 2 plain 3 local 4 loop 5 local 6. plain 7 loop 8 loop 9. plain2 內(nèi)部循環(huán)變疑隱藏同劣的外部循環(huán)變量,如

11、: Sx Sx Sx $x $x 輸出結(jié)果: loop 1 loop 2 loop 3 loop 2 loop 1 模板中的變量會(huì)隱藏(而不是覆蓋)數(shù)據(jù)模型中同名變量,如果需要訪問(wèn)數(shù)據(jù)模型中的同名 變疑,使用特殊變量global,下面的例子假設(shè)數(shù)據(jù)模型中的user的值是Big Joe: assign user = Joe Hider/zSuser Sglobalsuser #一一 prints: Big Joe 一一 名字空間 通常情況,只使用一個(gè)名字空間,稱為主名字空間,但為了創(chuàng)建可重用的宏、變換器或其它 變量的集合(通常稱庫(kù)),必須使用多名字空間,其目的是防止同名沖突 創(chuàng)建庫(kù) 下而是一個(gè)創(chuàng)

12、建庫(kù)的例子(假設(shè)保存在lib/my_test. ftl中): Copyright (C) $date Julia Smith All rights reserved Email: Smail assign mail = 使用import指令導(dǎo)入庫(kù)到模板中,F(xiàn)reemarker會(huì)為導(dǎo)入的庫(kù)創(chuàng)建新的名字空間, 并可以通 過(guò)import指令中指建的散列變量訪問(wèn)庫(kù)中的變呈:: mport /lib/my_test ftl as my$ my.昉訂 S mail 輸出結(jié)果: Copyright (C) 1999-2002 Julia Smith. All rights reserved. Email:

13、acme com 可以看到例子中使用的兩個(gè)同名變量并沒(méi)有沖突,因?yàn)樗鼈兾挥诓煌拿挚臻g。還可以使 FreeMarker macro 宏的使用 用assign指令在導(dǎo)入的輕字空間中創(chuàng)建或替代變量,下面是一個(gè)例子: $my. mail$my. mail 輸出結(jié)果: other, com 數(shù)據(jù)模型中的變量任何地方都可見(jiàn),也包括不同的名字空間,下面是修改的庫(kù): Copyright (C) $date $user. All rights reserved. #assign mail = $useracme. com 假設(shè)數(shù)據(jù)模型中的user變量的值是Fred,則下而的代碼: my. copyright

14、 date二1999-2002/$my. mail 輸出結(jié)果: Copyright (C) 1999-2002 Fred. All rights reserved. 選擇 Velocity 還是 FreeMarker? Velocity是另外一個(gè)優(yōu)秀的模板引擎,它是FreeMarker的有力競(jìng)爭(zhēng)者。但是它的模板語(yǔ)言 不夠強(qiáng)大,也不夠嚴(yán)謹(jǐn)。 除開(kāi)FreeMarker內(nèi)建的Velocity所沒(méi)有的強(qiáng)大函數(shù)外FreeMarker還在以卜-方面更勝一籌: 與Velocity相比,F(xiàn)reeMarker對(duì)表現(xiàn)邏輯和業(yè)務(wù)邏輯的劃分更為嚴(yán)格,F(xiàn)reemarker在模板 中不允許對(duì)Servlet API進(jìn)行直接操作(而Velocity可以),如FreeMarker中禁止對(duì) HttpServletRequest 對(duì)象直接訪問(wèn)(但可以訪問(wèn) HttpServletRequest 對(duì)象中的 Attribute) 通過(guò)更加嚴(yán)格的隔離機(jī)制,牽涉邏輯處理的操作被強(qiáng)制轉(zhuǎn)移到邏輯層。從而完全保證了層次 之間的淸晰性。 另外一個(gè)Velocity無(wú)法實(shí)現(xiàn)的特性,也是最具備實(shí)際意義的特性:FreeMarker提供了強(qiáng)大 的宏。 此夕卜,F(xiàn)re

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論