FreeMarker简介
1、概述
- 输出内容 = 数据模型 + 模板
- 组成部分:
- 文本:文本会照着原样来输出
- 插值:这部分的输出会被数据模型中的值来替换,插值方式
${value}
- FTL 标签:类似html标签,是FreeMarker的指令
<# 指令>...</# 指令>
, 不会被打印在输出在内容中 - 注释:类似html注释,
<#-- 注释 -->
2、数据模型
- FreeMarker的数据模型就是
key-vale
对象,一般写作dataModel
。 - 要求
dataModel
的key
必须为String
,value
可以是其他的标量类型,有些需要在模板中用内建函数标注进行插值。
3、模板
模板常用指令介绍
1、列表
<#list dataList as item >
${item.attr1}
${item.attr2}
...
</#list>
2、判断
<#if item<0 >
...
<#elif item==0 >
...
<#else>
...
</#if>
3、循环跳出指令
<#break>
4、 自定义变量
<#assign var = item[内建函数] >
5、导入模板内容
<#include "模板文件相对路径">
注意:在标签内不要使用插值符号${}
,直接写key值
模板常用内建函数
4、配置
Created with Raphaël 2.2.0 开始 创建一个 Configuration 实例 指定加载器把模板加载到缓存 获取模板 获取数据模型 处理模板 结束
- 加载器部分可以使用文件加载器也可以使用字符串加载器
- 处理模板可以选着输出到控制台也可选择输出到文件
- 创建配置器实例
//1 创建配置对象
Configuration cfg = new Configuration();
- 指定加载器,把模板加载到配置器缓存,同时获取模板
1) 创建文件路径加载器
FileTemplateLoader fil = new FileTemplateLoader(new File("templates"));//填写模板目录的相对路径即可
cfg.setTemplateLoader(fil);
// 从模板路径下获取模板文件
Template template = cfg.getTemplate("template.ftl");
2)字符串加载器(不常使用,直接使用字符串模板)
FileTemplateLoader fil = new FileTemplateLoader(new File("templates"));//填写模板目录的相对路径即可
cfg.setTemplateLoader(fil);
// 自定义字符串模板
String templateString = "欢迎您:${username}";
// 使用 Template 构造函数创建模板
Template template = new Template("name",new StringReader(templateString),cfg);
- 获取数据模型
// 获取数据模型
// 可以使用 put()方法加入数据
Map<String,Object> dataModel = getDataModel();
- 处理模板
- 输出结果到文件
// 创建输出的文件对象
File file = new File(".\\output\\out.mb");
file.mkdirs();// 注意异常处理
// 构造FileWriter
FileWriter fw = new FileWriter(file);
// process()方法第一个参数为数据模型、第二个参数为Writer
template.process(dataModel,fw);
- 输出结果到控制台
// 第二个参数是PrintWriter
template.process(dataModel,new PrintWriter(System.out));
- 总结
FileWriter 输出到文件
PrintWriter 输出到控制台
5、总结
- 简单介绍了FreeMarker的使用,为代码生成器的构建做好准备。
- 理解FreeMarker的核心就是:
输出 = 模型 + 模板