上一篇我们讨论了freemarker的数据结构、控制语句的基础知识和使用技巧,本篇我们介绍一下
freemarker的命名空间。
一、命名空间简介和使用
对于“命名空间”来说,即是开发中经常遇到的“namespace”。几乎每个编程语言都有自己
的namespace,例如Java里的“包”就是一个namespace的概念。namespace一般是用来解决重名
问题的,我们可以在不同的namespace下创建相同名称的东西。
在freemarker中我们需要如何使用namespace呢?
上一篇讲到,我们可以使用assign给某个变量赋值:
<#assign name="张三"/><#-- 给后台传来的name变量赋值 -->
或者使用macro指令创建“自定义指令”:
<#macro sayHello name>
欢迎您光临,${name}
</#macro>
后面调用<#macro "张三"></#macro>即可打印出“欢迎您光临,张三”。
上面的分别assign与macro是自定义的“变量”和“宏”。当我们想要在其它的模板文件中使用
这些变量和宏的时候,就要将定义“变量”和“宏”的ftl文件路径作为其命名空间引入至需要
它们的其它模板文件中。
例如以下样例:
<#macro pageFoot date>
<p>Copyright (C) ${date} 某某直播平台.</p>
</#macro>
<#assign mail="[email protected]"/>
上面定义了一个自定义指令“pageFoot”,用来在网页的尾部放置网站版权信息,其中日期
作为参数引入,动态显示在版权信息中。下面的assign定义了一个网站管理员的邮箱,用于放置在
所有网站的底部。上面的指令放置在b.ftl文件中:
然后在a.ftl文件中引入上面的b.ftl的命名空间(即其对于a.ftl的相对路径),并使用相关指令
与变量:
<#import "b.ftl" as bb/>
<@bb.pageFoot date="2007-2018"/>
${bb.mail}
${mail}
<#assign mail="[email protected]"/>
${mail}
<#assign mail="[email protected]" in bb/>
${bb.mail}
我们在测试类中,在动态参数中放置页面自己的mail变量:
package cn.com.test.freemarker;
import java.io.File;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import freemarker.template.Configuration;
import freemarker.template.Template;
public class Test1 {
public static void main(String[] args) throws Exception {
//创建Freemarker配置实例
Configuration cfg = new Configuration();
cfg.setDirectoryForTemplateLoading(new File("templates"));
//创建数据模型
Map<String,Object> root = new HashMap<String,Object>();
root.put("mail", "[email protected]");
//加载模板文件
Template t1 = cfg.getTemplate("a.ftl");
//显示生成的数据,将合并后的数据打印到控制台
Writer out = new OutputStreamWriter(System.out);
t1.process(root, out);
out.flush();
out.close();
}
}
运行测试程序,在控制台中打印一下结果:
可以看到,第一个结果打印出了b.ftl中定义的公用页脚信息,并将“2007-2018”变量嵌入。
第二个结果则拿到了b.ftl中定义mail变量,而第三个结果拿到的是该模板自己的mail变量。
第四个结果是使用assign为模板自己的mail变量赋了新值“[email protected]”,第五个结果
使用“in 命名空间代号”将引入的b.ftl中的mail变量赋了新值“[email protected]”。
二、命名空间命名规则
对于命名空间,其也是有规则的。假设公司名为example,其主页为www.example.com,如果你
需要为公司编写一个部件库,则引入你所写的FTL的路径应该是:/lib/example.com/widget.ftl。
第三次路径分割后的部分可以包含子目录,可以像下面这
样写:/lib/example.com/commons/string.ftl
一个重要的规则就是路径不应该包含大写字母,为了分隔词语,使用下划线_,就像
wml_form(而不是 wmlForm)。
如果你的工作不是为公司或组织开发库,也要注意,你应该使用项目主页的 URL,比如
/lib/example.sourceforge.net/example.ftl或/lib/geocities.com/jsmith/example.ftl。
标签:java,FreeMarker,freemarker,import,mail,com,ftl,模板 From: https://blog.51cto.com/u_16012040/6131016