zoukankan      html  css  js  c++  java
  • 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进行导入

  • 相关阅读:
    es6异步编程 Promise 讲解 --------各个优点缺点总结
    js重新讲解继承,es5的一些继承,es6继承的改变 ----------由浅入深
    node.js里的buffer常见操作,copy,concat等实例讲解
    node.js 写流 createWriteStream----由浅入深
    node.js 读取文件--createReadStream
    Java的位运算符—— 与(&)、非(~)、或(|)、异或(^)
    XML的特殊字符处理
    mysql语句收藏
    MYSQL学习
    利用HTML5 LocalStorage实现跨页面通信channel
  • 原文地址:https://www.cnblogs.com/moli-/p/6484401.html
Copyright © 2011-2022 走看看