<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    OMG,到底在尋找什么..................
    (構(gòu)造一個完美的J2EE系統(tǒng)所需要的完整知識體系)
    posts - 198,  comments - 37,  trackbacks - 0
    轉(zhuǎn)貼地址:http://blog.csdn.net/chenyun2000/archive/2004/11/17/184887.aspx

    4、雜項(xiàng)

    1)用戶定義指令

    l???????? 宏和變換器變量是兩種不同類型的用戶定義指令,它們之間的區(qū)別是宏是在模板中使用macro指令定義,而變換器是在模板外由程序定義,這里只介紹宏

    l???????? 基本用法

    ????????? 宏是和某個變量關(guān)聯(lián)的模板片斷,以便在模板中通過用戶定義指令使用該變量,下面是一個例子:

    <#macro greet>
    ? <font size="+2">Hello Joe!</font>
    </#macro>? 

    ????????? 作為用戶定義指令使用宏變量時,使用@替代FTL標(biāo)記中的#

    <@greet></@greet>

    ????????? 如果沒有體內(nèi)容,也可以使用:

    <@greet/>

    l???????? 參數(shù)

    ????????? macro指令中可以在宏變量之后定義參數(shù),如:

    <#macro greet person>
    ? <font size="+2">Hello ${person}!</font>
    </#macro>?

    ????????? 可以這樣使用這個宏變量:

    <@greet person="Fred"/> and <@greet person="Batman"/>?

    輸出結(jié)果是:

    ? <font size="+2">Hello Fred!</font>
     and?? <font size="+2">Hello Batman!</font>
     ? 

    ????????? 宏的參數(shù)是FTL表達(dá)式,所以下面的代碼具有不同的意思:

    <@greet person=Fred/>

    ????????? 這意味著將Fred變量的值傳給person參數(shù),該值不僅是字符串,還可以是其它類型,甚至是復(fù)雜的表達(dá)式

    ????????? 宏可以有多參數(shù),下面是一個例子:

    <#macro greet person color>
    ? <font size="+2" color="${color}">Hello ${person}!</font>
    </#macro>?

    ????????? 可以這樣使用該宏變量:

    <@greet person="Fred" color="black"/>?

    ????????? 其中參數(shù)的次序是無關(guān)的,因此下面是等價(jià)的:

    <@greet color="black" person="Fred"/>

    ????????? 只能使用在macro指令中定義的參數(shù),并且對所有參數(shù)賦值,所以下面的代碼是錯誤的:

    <@greet person="Fred" color="black" background="green"/>
    <@greet person="Fred"/>

    ????????? 可以在定義參數(shù)時指定缺省值,如:

    <#macro greet person color="black">
    ? <font size="+2" color="${color}">Hello ${person}!</font>
    </#macro>? 

    ????????? 這樣<@greet person="Fred"/>就正確了

    ????????? 宏的參數(shù)是局部變量,只能在宏定義中有效

    l???????? 嵌套內(nèi)容

    ????????? 用戶定義指令可以有嵌套內(nèi)容,使用<#nested>指令執(zhí)行指令開始和結(jié)束標(biāo)記之間的模板片斷

    ????????? 例子:

    <#macro border>
    ? <table border=4 cellspacing=0 cellpadding=4><tr><td>
    ??? <#nested>
    ? </tr></td></table>
    </#macro>? 

    這樣使用該宏變量:

    <@border>The bordered text</@border>

    輸出結(jié)果:

    ? <table border=4 cellspacing=0 cellpadding=4><tr><td>
    ?? ?The bordered text
    ? </tr></td></table>
    ? 

    ????????? <#nested>指令可以被多次調(diào)用,例如:

    <#macro do_thrice>
    ? <#nested>
    ? <#nested>
    ? <#nested>
    </#macro>
    <@do_thrice>
    ? Anything.
    </@do_thrice>? 

    輸出結(jié)果:

    ? Anything.
    ? Anything.
    ? Anything.?

    ????????? 嵌套內(nèi)容可以是有效的FTL,下面是一個有些復(fù)雜的例子:

    <@border>
    ? <ul>
    ? <@do_thrice>
    ??? <li><@greet person="Joe"/>
    ? </@do_thrice>
    ? </ul>
    </@border>?

    輸出結(jié)果:

    ? <table border=4 cellspacing=0 cellpadding=4><tr><td>
    ????? <ul>
    ??? <li><font size="+2">Hello Joe!</font>
    ?
    ??? <li><font size="+2">Hello Joe!</font>
    ?
    ??? <li><font size="+2">Hello Joe!</font>
    ?
    ? </ul>
    ?
    ? </tr></td></table>? 

    ????????? 宏定義中的局部變量對嵌套內(nèi)容是不可見的,例如:

    <#macro repeat count>
    ? <#local y = "test">
    ? <#list 1..count as x>
    ??? ${y} ${count}/${x}: <#nested>
    ? </#list>
    </#macro>
    <@repeat count=3>${y?default("?")} ${x?default("?")} ${count?default("?")}</@repeat>

    輸出結(jié)果:

    ??? test 3/1: ? ? ?
    ??? test 3/2: ? ? ?
    ??? test 3/3: ? ? ?

    ????????? ?

    l???????? 在宏定義中使用循環(huán)變量

    ????????? 用戶定義指令可以有循環(huán)變量,通常用于重復(fù)嵌套內(nèi)容,基本用法是:作為nested指令的參數(shù)傳遞循環(huán)變量的實(shí)際值,而在調(diào)用用戶定義指令時,在<@…>開始標(biāo)記的參數(shù)后面指定循環(huán)變量的名字

    ????????? 例子:

    <#macro repeat count>
    ? <#list 1..count as x>
    ??? <#nested x, x/2, x==count>
    ? </#list>
    </#macro>
    <@repeat count=4 ; c, halfc, last>
    ? ${c}. ${halfc}<#if last> Last!</#if>
    </@repeat>? 

    輸出結(jié)果:

    ? 1. 0.5
    ? 2. 1
    ? 3. 1.5
    ? 4. 2 Last!
    ? 

    ????????? 指定的循環(huán)變量的數(shù)目和用戶定義指令開始標(biāo)記指定的不同不會有問題

    n???????? 調(diào)用時少指定循環(huán)變量,則多指定的值不可見

    n???????? 調(diào)用時多指定循環(huán)變量,多余的循環(huán)變量不會被創(chuàng)建

    2)在模板中定義變量

    l???????? 在模板中定義的變量有三種類型:

    ????????? plain變量:可以在模板的任何地方訪問,包括使用include指令插入的模板,使用assign指令創(chuàng)建和替換

    ????????? 局部變量:在宏定義體中有效,使用local指令創(chuàng)建和替換

    ????????? 循環(huán)變量:只能存在于指令的嵌套內(nèi)容,由指令(如list)自動創(chuàng)建;宏的參數(shù)是局部變量,而不是循環(huán)變量

    l???????? 局部變量隱藏(而不是覆蓋)同名的plain變量;循環(huán)變量隱藏同名的局部變量和plain變量,下面是一個例子:

    <#assign x = "plain">
    1. ${x}? <#-- we see the plain var. here -->
    <@test/>
    6. ${x}? <#-- the value of plain var. was not changed -->
    <#list ["loop"] as x>
    ??? 7. ${x}? <#-- now the loop var. hides the plain var. -->
    ??? <#assign x = "plain2"> <#-- replace the plain var, hiding does not mater here -->
    ??? 8. ${x}? <#-- it still hides the plain var. -->
    </#list>
    9. ${x}? <#-- the new value of plain var. -->
    ?
    <#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>? 

    輸出結(jié)果:

    1. plain
    ? 2. plain
    ? 3. local
    ??? 4. loop
    ? 5. local
    6. plain
    ??? 7. loop
    ??? 8. loop
    9. plain2
    ?

    l???????? 內(nèi)部循環(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>

    輸出結(jié)果:

    ? loop 1
    ??? loop 2
    ????? loop 3
    ??? loop 2
    ? loop 1?

    l???????? 模板中的變量會隱藏(而不是覆蓋)數(shù)據(jù)模型中同名變量,如果需要訪問數(shù)據(jù)模型中的同名變量,使用特殊變量global,下面的例子假設(shè)數(shù)據(jù)模型中的user的值是Big Joe:

    <#assign user = "Joe Hider">
    ${user}????????? <#-- prints: Joe Hider -->
    ${.globals.user} <#-- prints: Big Joe -->? 

    3)名字空間

    l???????? 通常情況,只使用一個名字空間,稱為主名字空間

    l???????? 為了創(chuàng)建可重用的宏、變換器或其它變量的集合(通常稱庫),必須使用多名字空間,其目的是防止同名沖突

    l???????? 創(chuàng)建庫

    ????????? 下面是一個創(chuàng)建庫的例子(假設(shè)保存在lib/my_test.ftl中):

    <#macro copyright date>
    ? <p>Copyright (C) ${date} Julia Smith. All rights reserved.
    ? <br>Email: ${mail}</p>
    </#macro>? 
    <#assign mail = "jsmith@acme.com">?

    ????????? 使用import指令導(dǎo)入庫到模板中,F(xiàn)reemarker會為導(dǎo)入的庫創(chuàng)建新的名字空間,并可以通過import指令中指定的散列變量訪問庫中的變量:

    <#import "/lib/my_test.ftl" as my>
    <#assign mail="fred@acme.com">
    <@my.copyright date="1999-2002"/>
    ${my.mail}
    ${mail}? 

    輸出結(jié)果:

    ? <p>Copyright (C) 1999-2002 Julia Smith. All rights reserved.
    ? <br>Email: jsmith@acme.com</p>
    jsmith@acme.com
    fred@acme.com? 

    可以看到例子中使用的兩個同名變量并沒有沖突,因?yàn)樗鼈兾挥诓煌拿挚臻g

    l???????? 可以使用assign指令在導(dǎo)入的名字空間中創(chuàng)建或替代變量,下面是一個例子:

    <#import "/lib/my_test.ftl" as my>
    ${my.mail}
    <#assign mail="jsmith@other.com" in my>
    ${my.mail}? 

    l???????? 輸出結(jié)果:

    jsmith@acme.com
    jsmith@other.com? 

    l???????? 數(shù)據(jù)模型中的變量任何地方都可見,也包括不同的名字空間,下面是修改的庫:

    <#macro copyright date>
    ? <p>Copyright (C) ${date} ${user}. All rights reserved.</p>
    </#macro>
    <#assign mail = "${user}@acme.com"> ? 

    l???????? 假設(shè)數(shù)據(jù)模型中的user變量的值是Fred,則下面的代碼:

    <#import "/lib/my_test.ftl" as my>
    <@my.copyright date="1999-2002"/>
    ${my.mail} ? 

    l???????? 輸出結(jié)果:

    ? <p>Copyright (C) 1999-2002 Fred. All rights reserved.</p>
    Fred@acme.com ? 
    posted on 2006-04-19 18:06 OMG 閱讀(318) 評論(0)  編輯  收藏 所屬分類: FreeMarker

    <2006年4月>
    2627282930311
    2345678
    9101112131415
    16171819202122
    23242526272829
    30123456

    常用鏈接

    留言簿(1)

    隨筆分類

    隨筆檔案

    IT風(fēng)云人物

    文檔

    朋友

    相冊

    經(jīng)典網(wǎng)站

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 在线精品亚洲一区二区| 亚洲AV无码成H人在线观看| 久久久久亚洲精品无码网址| 亚洲熟女综合色一区二区三区| 永久免费的网站在线观看| 亚洲高清不卡视频| 99久热只有精品视频免费看| 午夜福利不卡片在线播放免费| 日本免费高清一本视频| 亚洲AV成人噜噜无码网站| 在线观看日本免费a∨视频| 亚洲Av无码一区二区二三区| 亚洲欧洲免费无码| 亚洲成aⅴ人片久青草影院按摩| 午夜影视在线免费观看| 边摸边吃奶边做爽免费视频网站 | 亚洲av无码一区二区三区四区| 亚洲av无码有乱码在线观看| 国产女高清在线看免费观看| 一个人免费观看www视频| 亚洲中文字幕无码爆乳AV| 亚洲中文无码永久免费| 亚洲色大18成人网站WWW在线播放| 久9这里精品免费视频| 在线免费视频一区| 亚洲精品福利你懂| 国产免费131美女视频| 美女被免费网站91色| 亚洲理论在线观看| 全免费a级毛片免费**视频| 一级**爱片免费视频| 91情国产l精品国产亚洲区| 日韩吃奶摸下AA片免费观看| 白白色免费在线视频| 亚洲精品福利视频| 瑟瑟网站免费网站入口| 亚洲av无码不卡| 日本xxwwxxww在线视频免费| 国产三级在线免费| 亚洲av无码一区二区三区人妖 | 亚洲国产成人五月综合网|