freemarker include 和 import

lib/my_test.ftl 模板內容以下:函數

<#macto copyright date>

  <p>Copyright (C)${date}Julia Smith.All rights reserved.</p>

</#macro>

<#assign mail = "jsmith@acme.com">

假設想在aWebPage.ftl 中使用這個模板.spa

若是使用code

<#include "/lib/my_test.ftl">

 

會在主命名空間中建立兩個變量. 若是再引入同名的變量時就會被後引入的或者新定義的覆蓋.這樣就不是很好,由於只想讓它們在"My Test Library"命名空間中.就須要用 import代替include了blog

<#import "lib/my_test.ftl" as my>

它會爲lib/my_test.ftl建立一個新的哈希表變量,就是空的命名空間my,若是在主命名空間有一個變量,名爲mail 或者 copyright,就不會引發混亂,由於兩個模板使用了不一樣的命名空間. 博客

若是 在lib/my_test.ftl 中修改 copyright 以下it

<#macro copyright date>   <p>Copyright (C) ${date} Julia Smith. All rights reserved.   <br>Email: ${mail}</p> </#macro>

而後修改aWebPage,ftl中的內容以下模板

<#import "/lib/my_test.ftl" as my> <#assign mail="fred@acme.com"> <@my.copyright date="1999-2002"/> ${my.mail} ${mail}

輸入爲class

<p>Copyright (C) 1999-2002 Julia Smith.All rights reserved.

  <br>Email :jsmith@acme.com

</p>

jsmith@acme.com

fred@acme.com

以上說明可能不太好理解  在其餘博客上看到一看即懂得解析 摘錄再次 方便查看test

 

問題顯示:import

 

在inc1.ftl與inc2.ftl中的內容分別是:

<#assign username="劉德華">與<#assign username="張學友">

接着我在hello.ftl模版中用include將inc1.ftl包含進來

<#include "/inc/inc1.ftl">
${username}

此刻獲取的結果是:劉德華

 

接着咱們在hello.ftl用include將inc1.ftl與inc2.ftl同時進行包含進來

<#include "/inc/inc1.ftl">
<#include "/inc/inc2.ftl">
${username}

此刻獲取的值是:張學友

 

總結:出現這種狀況,在兩個模版中都分別存在變量名都相同的變量的時候,include包含進來,會進行覆蓋,include只時候將其公共的靜態文件進行包含,而裏面不涉及到內部函數以及變量聲明之類的,當涉及到這種問題,咱們就要用import進行導入

 

 

相關文章
相關標籤/搜索