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

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

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

    OMG,到底在尋找什么..................
    (構(gòu)造一個(gè)完美的J2EE系統(tǒng)所需要的完整知識(shí)體系)
    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???????? 基本用法

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

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

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

    <@greet></@greet>

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

    <@greet/>

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

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

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

    ????????? 可以這樣使用這個(gè)宏變量:

    <@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ù),下面是一個(gè)例子:

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

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

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

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

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

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

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

    ????????? 可以在定義參數(shù)時(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,下面是一個(gè)有些復(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>? 

    ????????? 宏定義中的局部變量對(duì)嵌套內(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)用用戶定義指令時(shí),在<@…>開始標(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)記指定的不同不會(huì)有問(wèn)題

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

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

    2)在模板中定義變量

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

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

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

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

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

    <#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???????? 模板中的變量會(huì)隱藏(而不是覆蓋)數(shù)據(jù)模型中同名變量,如果需要訪問(wèn)數(shù)據(jù)模型中的同名變量,使用特殊變量global,下面的例子假設(shè)數(shù)據(jù)模型中的user的值是Big Joe:

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

    3)名字空間

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

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

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

    ????????? 下面是一個(gè)創(chuàng)建庫(kù)的例子(假設(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)入庫(kù)到模板中,F(xiàn)reemarker會(huì)為導(dǎo)入的庫(kù)創(chuàng)建新的名字空間,并可以通過(guò)import指令中指定的散列變量訪問(wèn)庫(kù)中的變量:

    <#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? 

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

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

    <#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ù)模型中的變量任何地方都可見,也包括不同的名字空間,下面是修改的庫(kù):

    <#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 閱讀(313) 評(píng)論(0)  編輯  收藏 所屬分類: FreeMarker

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     

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

    常用鏈接

    留言簿(1)

    隨筆分類

    隨筆檔案

    IT風(fēng)云人物

    文檔

    朋友

    相冊(cè)

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

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲国产精品久久久久秋霞影院 | 精品国产亚洲AV麻豆| 最近免费2019中文字幕大全| 中文字幕精品亚洲无线码一区| 亚洲av成人中文无码专区| 在线观看免费人成视频| 亚洲高清美女一区二区三区| 久9这里精品免费视频| 亚洲午夜福利AV一区二区无码| 一二三四在线观看免费中文在线观看| 香蕉视频在线观看免费国产婷婷| 亚洲午夜成激人情在线影院| 日韩人妻一区二区三区免费| 亚洲国产精品一区二区成人片国内 | 国产亚洲蜜芽精品久久| 日韩精品视频免费观看| 色天使亚洲综合在线观看| 亚洲经典在线观看| 成全视频在线观看免费| 亚洲中文字幕无码久久精品1| 一级女人18片毛片免费视频| 免费一级毛片一级毛片aa| 国产亚洲男人的天堂在线观看| 韩国18福利视频免费观看| 亚洲欧美国产国产一区二区三区| 两性刺激生活片免费视频 | 亚洲av无码专区在线观看下载| 成年在线观看免费人视频草莓| 亚洲国产系列一区二区三区| 免费无码A片一区二三区| 亚洲字幕AV一区二区三区四区| 99久久免费国产精品特黄| 亚洲天堂2016| 成年在线观看免费人视频草莓| 亚洲欧美日韩久久精品| 日本a级片免费看| 色婷婷精品免费视频| 2022中文字字幕久亚洲| 久久国产美女免费观看精品| 亚洲av无码无在线观看红杏| 中文字幕免费观看|