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 中使用這個模板.

如果使用

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

 

會在主命名空間中創建兩個變量. 如果再引入同名的變量時就會被后引入的或者新定義的覆蓋.這樣就不是很好,因為只想讓它們在"My Test Library"命名空間中.就需要用 import代替include了

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

它會為lib/my_test.ftl創建一個新的哈希表變量,就是空的命名空間my,如果在主命名空間有一個變量,名為mail 或者 copyright,就不會引起混亂,因為兩個模板使用了不同的命名空間. 

如果 在lib/my_test.ftl 中修改 copyright 如下

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

輸入為

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

  <br>Email :jsmith@acme.com

</p>

jsmith@acme.com

fred@acme.com

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

 

問題顯示:

 

在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進行導入

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM