国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

FreeMarker設計指南(4) (完)

2019-11-18 11:22:33
字體:
來源:轉載
供稿:網友

4、雜項

1)用戶定義指令

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

l         基本用法

Ø         宏是和某個變量關聯的模板片斷,以便在模板中通過用戶定義指令使用該變量,下面是一個例子:

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

Ø         作為用戶定義指令使用宏變量時,使用@替代FTL標記中的#

<@greet></@greet>

Ø         假如沒有體內容,也可以使用:

<@greet/>

l         參數

Ø         在macro指令中可以在宏變量之后定義參數,如:

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

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

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

輸出結果是:

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

Ø         宏的參數是FTL表達式,所以下面的代碼具有不同的意思:

<@greet person=Fred/>

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

Ø         宏可以有多參數,下面是一個例子:

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

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

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

Ø         其中參數的次序是無關的,因此下面是等價的:

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

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

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

Ø         可以在定義參數時指定缺省值,如:

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

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

Ø         宏的參數是局部變量,只能在宏定義中有效

l         嵌套內容

Ø         用戶定義指令可以有嵌套內容,使用<#nested>指令執行指令開始和結束標記之間的模板片斷

Ø         例子:

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

這樣使用該宏變量:

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

輸出結果:

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

Ø         <#nested>指令可以被多次調用,例如:

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

輸出結果:

  Anything.
  Anything.
  Anything. 

Ø         嵌套內容可以是有效的FTL,下面是一個有些復雜的例子:

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

輸出結果:

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

Ø         宏定義中的局部變量對嵌套內容是不可見的,例如:

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

輸出結果:

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

Ø          

l         在宏定義中使用循環變量



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 离岛区| 措美县| 墨脱县| 林州市| 浦城县| 农安县| 德庆县| 临高县| 班玛县| 澄江县| 河北区| 特克斯县| 天柱县| 涟水县| 老河口市| 晋中市| 永和县| 汕头市| 纳雍县| 富锦市| 确山县| 达州市| 桃园县| 青冈县| 苍南县| 江都市| 苏尼特右旗| 保定市| 吴堡县| 佛山市| 阳泉市| 宽城| 富顺县| 柳河县| 雷波县| 彰化县| 萨嘎县| 冕宁县| 炉霍县| 布拖县| 乡宁县|