FreeMarker是一个基于模板生成文本输出的工具,下面简单介绍一下FreeMarker组件的使用:
首先在根目录下建立一个templates文件夹,放置我们生出的FreeMarker模板。
然后就是建立一个Java文件,开始去创建一个连接,然后利用模板输出数据。
1.创建FreeMarker的配置实例
/**
*创建FreeMarker的配置实例
*@author Guo
*/
Configuration config = new Configuration();
config.setDirectoryForTemplateLoading(new File("templates"));
2.创建数据的模型,也就是我们放置数据的地方,这里默认是用Map集合是存放数据,然后通过key去value
/**
* 创建数据模型
* 也就是相当于数据源
* @author Guo
*/
Map map = new HashMap();
map.put("user", "xujianguo");
3.加载模板文件,在这里放入你在templates要使用的ftl
/**
* 加载模板文件
* @author Guo
*/
Template template = config.getTemplate("t1.ftl");
4.生出数据并打印,这里我在console下打印信息
/**
* 生出数据并打印
* @author Guo
*/
Writer writer = new OutputStreamWriter(System.out);
template.process(map, writer);
writer.flush();
writer.close();
我的ftl文件的信息很简单,就这么一句
hello, I am ${user}, nice to meet you!
ftl文件就会在传过来的map集合中找user这个key,然后就对应找到的它的value了。
下面介绍一下在ftl中常见的指令:
1.if指令
<#if user == "xujianguo">
Yes, I am.
</#if>
ftl中可以使用==的判断表达式,如果真的话就输出标签之间的内容,当然你还可能遇到下面这种情况的表达:
<#if num gt 22>
old!
<#else>
young!
</#if>
这里的gt是大于的意思,如果为真的话就真行old!如果假的话就执行else标签后面的语句。
2.list指令
List list = new ArrayList();
list.add("aaa");
list.add("bbb");
list.add("ccc");
map.put("list", list);
<#list list as a>
${a}
</#list>
list针对的是集合,如果你放进的是集合的话,可以通过list指令来遍历它,标签中的a下相当于遍历当前的对象,通过${}就可以拿出里面的值了。
3.include指令
<#include "1.txt" />
通过简单的include指令就可以将1.txt文件包含进当前的ftl文件中了。
4.macro指令
<#macro m1>
<b>aaabbbccc</b>
<b>dddeeefff</b>
</#macro>
<@ m1 />
通过这种macro的宏定义,就是定义一个宏m1,宏的内容就是macro标签里的内容,然后通过<@ m1>来调用里面的内容。