freemarker 快速入门 杂项4

    3. 名字空间
通常情况,只使用一个名字空间,称为主名字空间
为了创建可重用的宏、变换器或其它变量的集合(通常称库),必须使用多名字空间,其目的是防止同名冲突
创建库
下面是一个创建库的例子(假设保存在lib/my_test.ftl中):
<#macro copyright date>
  <p>copyright (c) ${date} julia smith. all rights reserved.
  <br>email: ${mail}</p>
</#macro>
<#assign mail = "[email protected]">
使用import指令导入库到模板中,freemarker会为导入的库创建新的名字空间,并可以通过import指令中指定的散列变量访问库中的变量:
<#import "/lib/my_test.ftl" as my>
<#assign mail="[email protected]">
<@my.copyright date="1999-2002"/>
${my.mail}
${mail}
输出结果:
<p>copyright (c) 1999-2002 julia smith. all rights reserved.
  <br>email: [email protected]</p>
[email protected]
[email protected]
可以看到例子中使用的两个同名变量并没有冲突,因为它们位于不同的名字空间
可以使用assign指令在导入的名字空间中创建或替代变量,下面是一个例子:
<#import "/lib/my_test.ftl" as my>
${my.mail}
<#assign mail="[email protected]" in my>
${my.mail}
输出结果:
[email protected]
[email protected]
数据模型中的变量任何地方都可见,也包括不同的名字空间,下面是修改的库:
<#macro copyright date>
  <p>copyright (c) ${date} ${user}. all rights reserved.</p>
</#macro>
<#assign mail = "${user}@acme.com">
假设数据模型中的user变量的值是fred,则下面的代码:
<#import "/lib/my_test.ftl" as my>
<@my.copyright date="1999-2002"/>
${my.mail}
输出结果:
<p>copyright (c) 1999-2002 fred. all rights reserved.</p>
[email protected]
 

你可能感兴趣的:(java,工作)