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

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

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

    隨筆-112  評(píng)論-73  文章-0  trackbacks-0

    轉(zhuǎn)自:http://fhd001.iteye.com/blog/1167764

    freemarker之模板開發(fā)(其它之自定義指令)

    ----------

    自定義指令可以使用macro指令來(lái)定義,這是模板設(shè)計(jì)者所關(guān)心的內(nèi)容。Java程序員若不想在模板中實(shí)現(xiàn)自定義指令,而是在java語(yǔ)言中實(shí)現(xiàn)指令的定義,這時(shí)可以使用:freemarker.template.TemplateDirectiveModel類來(lái)擴(kuò)展。

    ? ?

    宏是有一個(gè)變量名的模板片段。你可以在模板中使用宏作為自定義指令,這樣就能進(jìn)行重復(fù)性的工作。

    如例:

    Html代碼??

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

    macro指令自身不打印任何內(nèi)容,它只是用來(lái)創(chuàng)建宏變量,所以就會(huì)有一個(gè)名為greet的變量,<#macro greet></#macro>之間的內(nèi)容(稱為宏定義體)當(dāng)使用它作為指令時(shí)將會(huì)被執(zhí)行。你可以在FTL標(biāo)記中通過(guò)@代替#來(lái)使用自定義指令使用變量名作為指令名。而且,自定義指令的結(jié)束標(biāo)記也是需要的,如:<@greet></@greet>

    因?yàn)?/span><anything>,/anything><anything/>是相同的,你也可以使用:<@greet/>

    宏能做的事情還有很多,因?yàn)樵?/span><#macro...></#macro>之間的東西是模板片段,也就是說(shuō)它可以包含插值(${..})FTL標(biāo)簽(如:<#if...>...</#if>)

    注意:程序員通常將使用<@...>,這稱為宏調(diào)用

    ? ?

    參數(shù)

    macro指令中,宏名稱的后面位置是用來(lái)定義變量的。如例:?

    Html代碼??

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

    那么就可以這樣來(lái)使用這個(gè)宏:

    Html代碼??

    1. <@greet?person="Fred"/>??

    使用預(yù)定義指令時(shí),參數(shù)的值(=號(hào)后邊的值)可以是FTL表達(dá)式。這樣,不像HTML"Fred"的引號(hào)就可以不用要了。<@greet person=Fred/>也意味著使用變量的值Fred作為person參數(shù),而不是字符串"Fred"。當(dāng)然參數(shù)值并不一定是字符串類型,也可以是數(shù)字,布爾值,哈希表,序列等...也可以在=號(hào)左邊使用復(fù)雜表達(dá)式(比如:someParam=(price+50)*1.25)

    自定義指令可以有多個(gè)參數(shù),如: ?

    Html代碼??

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

    那么,這個(gè)宏就可以這樣來(lái)使用:

    Html代碼??

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

    同時(shí)也必須給出在宏中定義所有參數(shù)的值。如果你嘗試<@greet person="Fred"/>時(shí)也會(huì)發(fā)生錯(cuò)誤,因?yàn)橥浿付?/span>color的值了。?

    根據(jù)FTL表達(dá)式規(guī)則,明白下面這一點(diǎn)是至關(guān)重要的,someParam=foosomeParam="${foo}"是不同的。第一種情況,是把變量foo的值作為參數(shù)的值來(lái)使用。第二種情況則是使用插值形式的字符串,那么參數(shù)值就是字符串了,這個(gè)時(shí)候,foo的值呈現(xiàn)為文本,而不管foo是什么類型的

    宏參數(shù)的另外一個(gè)重要的方面是它們是局部變量。

    ? ?

    嵌套內(nèi)容

    自定義指令可以嵌套內(nèi)容,和預(yù)定義指令相似。如:?

    Html代碼??

    1. <#macro?border>??
    2. ????<table?border=4?cellspacing=0?cellpadding=4><tr><td>??
    3. ????????<#nested>??
    4. ????</td></tr></table>??
    5. </#macro>??

    注:<#nested>指令執(zhí)行位于開始和結(jié)束標(biāo)記指令之間的模板代碼段。如果這樣寫:

    Html代碼??

    1. <@border>The?bordered?text</@border>??

    那么就會(huì)輸出:

    Html代碼??

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

    如果不使用nested指令,那么嵌套的內(nèi)容就不會(huì)被執(zhí)行,前面的例子如果這樣寫:

    Html代碼??

    1. <@greet?person="Joe">??
    2. ????Anything.??
    3. </@greet>??

    FreeMarker不會(huì)把它視為錯(cuò)誤,只是打印:

    Html代碼??

    1. <font?size="+2">Hello?Joe!</font>??

    嵌套的內(nèi)容被忽略了,因?yàn)?/span>greet宏沒(méi)有使用nested指令。

    ? ?

    宏和循環(huán)變量

    list這樣的預(yù)定義指令可以使用循環(huán)變量,如例:

    Html代碼??

    1. <#macro?do_thrice>??
    2. ????<#nested?1>??
    3. ????<#nested?2>??
    4. ????<#nested?3>??
    5. </#macro>??

    用戶自定義指令,使用";"代替"as"

    Html代碼??

    1. <@do_thrice?;?x>??
    2. ????${x}?Anything.??
    3. </@do_thrice>??

    將會(huì)輸出:

    1 Anything.

    2 Anything.

    3 Anything.

    nested指令(當(dāng)然參數(shù)可以是任意的表達(dá)式)的參數(shù),循環(huán)變量的名稱是在自定義指令的開始標(biāo)記(<@...>)的參數(shù)后面通過(guò)分號(hào)確定的。

    posted on 2012-06-21 10:04 Libo 閱讀(779) 評(píng)論(0)  編輯  收藏

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 日本无吗免费一二区| 亚洲宅男天堂a在线| 日本免费人成视频播放| 无码一区二区三区免费| 又硬又粗又长又爽免费看| 国产精品亚洲片夜色在线| 亚洲αv在线精品糸列| 亚洲日本中文字幕一区二区三区| 成人黄色免费网址| 久久九九AV免费精品| 一级黄色片免费观看| 99亚洲乱人伦aⅴ精品| 亚洲高清有码中文字| 亚洲美女免费视频| 亚洲国产人成在线观看69网站 | 亚洲精品日韩中文字幕久久久| 亚洲精品一级无码中文字幕| 在线观看91精品国产不卡免费| 无码人妻久久一区二区三区免费丨 | 一级特黄录像免费播放中文版| 亚洲午夜精品久久久久久app| 亚洲精品国产第1页| 亚洲图片一区二区| 国产AV无码专区亚洲Av| 亚洲热线99精品视频| 久久久久亚洲AV成人网| 中文字幕亚洲不卡在线亚瑟| 亚洲精品国产精品国自产观看| 国产免费av片在线无码免费看| 日本不卡高清中文字幕免费| 免费看片A级毛片免费看| 四虎www成人影院免费观看| 最近最新的免费中文字幕| 成人免费一区二区无码视频| 成人午夜性A级毛片免费| 日韩一区二区a片免费观看| 最近中文字幕无吗免费高清| 我要看免费的毛片| 国产人妖ts在线观看免费视频| 免费国产小视频在线观看| 亚洲精品视频免费观看|