1. 程式人生 > >【FreeMarker】四種變數的用法

【FreeMarker】四種變數的用法

FreeMarker四種變數的用法

2012-12-06 08:40:41| 釋出者: 黃奕能

 freemarker的變數可以分為四種,分別是:(1)資料模型的變數【root中的變數】(2)模板中的變數使用【<#assign>定義的變數】(3)區域性變數【在指令中的變數】(4)迴圈變數【在迴圈中的變數】

freemarker的變數可以分為四種,分別是資料模型的變數【root中的變數】,模板中的變數使用【<#assign>定義的變數】,區域性變數【在指令中的變數】,迴圈變數【在迴圈中的變數】

資料模型的變數【root中的變數】

直接從模型中給模板傳值的變數就是資料模型的變數,它把變數的值放在一個map中,在模板中直接可以用。

@Test

publicvoid test10() {

root.put("username","張三");

fu.print("10.ftl",root);

}

${username}

張三

模板中的變數使用【<#assign>定義的變數】

模板中的變數,是使用<#assign定義的變數,如果模板中定義的變數和模型中的變數名稱一致,不是覆蓋,而是隱藏

<#assign username="李四">

<#--此時模板中的變數的名稱和模型中的變數名稱一致,不是覆蓋,而是隱藏-->

${username}

李四

模型中的變數被隱藏後,可以使用.globals可以訪問模型中的變數

<#--使用.globals可以訪問模型中的變數-->

${.globals.username}

張三

區域性變數【在指令中的變數】

使用local可以宣告區域性變數

<#macro test>

   <#--

此時當呼叫該指令之後,會將模板中的變數username覆蓋為王五

所以這種方式存在風險,所以一般不使用這種方式在指令中定義變數

   -->

   <#--<#assign  username="王五"/>-->

   <#--

使用local可以宣告區域性變數,所以在marco中非特殊使用區域性變數-->

   <#local  username="王五"/>

   ${username}

</#macro>

<@test/>

${username}

王五

李四

迴圈變數【在迴圈中的變數】

在list迴圈中定義的變數,迴圈中的變數只在迴圈中有效,也是一種臨時的變數定義方式

<#list 1..3 as username>

   <#--迴圈中的變量出了迴圈就消失-->

   ${username}

</#list>

${username}

   1

   2

   3

李四


本文連結:FreeMarker四種變數的用法,本文由huangyineng原創,轉載請註明出處

assign 

    assign指令在前面已經使用了多次,它用於為該模板頁面建立或替換一個頂層變數,     assign指令的用法有多種,包含建立或替換一個頂層變數,或者建立或替換多個變數等,
  1. 它的最簡單的語法如下:   
<#assign name=value [in namespacehash]>,
      	這個用法用於指定一個名為name的變數,該變數的值為value,
      	此外,FreeMarker允許在使用assign指令裡增加in子句,
      	in子句用於將建立的name變數放入namespacehash名稱空間中.

    2.  assign指令還有如下用法: 

 <#assign name1=value1 name2=value2 ... nameN=valueN [in namespacehash]>

 這個語法可以同時建立或替換多個頂層變數,此外,還有一種複雜的用法,

 如果需要建立或替換的變數值是一個複雜的表示式,則可以使用如下語法格式:

      則可以使用如下語法格式:

        <#assign name [in namespacehash]>capture this</#assign>,

在這個語法中,是指將assign指令的內容賦值給name變數.如下例子:

<#assign x>
      <#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"]as n>
      ${n}
      </#list>
</#assign>
${x}
上面的程式碼(${x}等價於<#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"]as n>  ${n}  </#list>):

輸出如下:              

 星期一 星期二 星期三 星期四 星期五 星期六 星期天

雖然assign指定了這種複雜變數值的用法,但是我們也不要濫用這種用法

  如下例子:
                 <#assign x>Hello ${user}!</#assign>,
       以上程式碼改為如下寫法更合適:
                 <#assign x="Hello ${user}!">

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------