国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
FreeMarker設(shè)計(jì)指南(4) (完)

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í)行指令開(kāi)始和結(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)容是不可見(jiàn)的,例如:

<#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í),在<@…>開(kāi)始標(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ù)目和用戶定義指令開(kāi)始標(biāo)記指定的不同不會(huì)有問(wèn)題

n         調(diào)用時(shí)少指定循環(huán)變量,則多指定的值不可見(jià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ù)模型中的變量任何地方都可見(jiàn),也包括不同的名字空間,下面是修改的庫(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   


本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
freemarker 語(yǔ)法 | 封建王朝
FreeMarker設(shè)計(jì)指南(完整整理)_狼的原野
【FreeMarker】【模板文件FTL】模板自定義指令 macro
Unity優(yōu)化大全(十)之 Memory
SAS:SAS 常用過(guò)程之 統(tǒng)計(jì)描述過(guò)程proc univariate
宏定義能否被賦值
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服