??? 当运行 FTL 模板时,就会有使用 assign 和 macro 指令创建的变量的集合,像这样的变量集合被称为 namespace 命名空间。在简
单的情况下可以只使用一个命名空间,称之为 main namespace 主命名空间。
??? 因为通常只使用本页上的命名空间,所以就没有意识到这点。如果想创建可以重复使用的宏,函数和其他变量的集合,通常用术语来说就是引用
library 库。 使用多个命名空间是必然的。只要考虑你在一些项目中,或者想和他人共享使用的时候,你是否有一个很大的宏的集合。 但要确保库中没有宏(或其他变量)名和数据模型中变量同名,而且也不能和模板中引用其他库中的变量同名。 通常来说,变量因为名称冲突也会相互冲突。所以要为每个库中的变量使用不同的命名空间。 废话少说,直奔主题。
?
???? 为解决这些问题,freeMarker 中有一个内置的import 指令, 不同library 库具有不同的命名空间,以保证相同变量在不同空间上,就有不同的值。
?
比如:namespace_val.ftl 模板 的变量 mail
?
namespace_val.ftl
?
<#macro copyright date>
<p>Copyright (C) ${date} Julia Smith. All rights reserved.
<br>Email: ${mail}</p>
</#macro>
<#assign mail = "jsmith@acme.com">
?
?
namespace_val_cal.ftl
?
<#-- <#import "namespace_val.ftl" as my> -->
<#import "namespace_val.ftl" as my>
<#assign mail="fred@acme.com">
<@my.copyright date="1999-2002"/>
${my.mail}
${mail}
???
?? 这两个文件中的 mail 变量,由于使用不同的命名空间,以至于不会相互的赋值。
?
另外,需要注意的是,import指令和include指令的区别
?