• 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进行导入

  • 相关阅读:
    第一次的作业
    第02组 Alpha冲刺(2/4)
    团队项目选题报告
    第一次个人编程作业
    第二次结对编程作业
    胖子的故事(四)
    关于博客园的聚合问题
    blog是写给谁看的
    ASP.NET Forms 身份验证
    要努力了!
  • 原文地址:https://www.cnblogs.com/moli-/p/6484401.html
Copyright © 2020-2023  润新知