依赖
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>
模板文件
1、文本,直接输出的部分
2、注释,即<#–…-->格式不会输出
3、插值(Interpolation):即${…}或者#{…}格式的部分,将使用数据模型中的部分替代输出
4、FTL 指令:FreeMarker 指令,和 HTML 标记类似,名字前加#予以区分,不会输出。
生成文件
第一步 :创建一个 Configuration 对象, 直接 new 一个对 象。构造方 法的参数就 是
freemarker 的版本号。
第二步:设置模板文件所在的路径。
第三步:设置模板文件使用的字符集。一般就是 utf-8.
第四步:加载一个模板,创建一个模板对象。
第五步:创建一个模板使用的数据集,可以是 pojo 也可以是 map。一般是 Map。
第六步:创建一个 Writer 对象,一般创建一 FileWriter 对象,指定生成的文件名。
第七步:调用模板对象的 process 方法输出文件。
第八步:关闭流
//1.创建配置类
Configuration configuration=new Configuration(Configuration.getVersion());
//2.设置模板所在的目录
configuration.setDirectoryForTemplateLoading(new
File("D:/kaola_work/freemarkerDemo/src/main/resources/"));
//3.设置字符集
configuration.setDefaultEncoding("utf-8");
//4.加载模板
Template template = configuration.getTemplate("test.ftl");
//5.创建数据模型
Map map=new HashMap();
map.put("name", "张三 ");
map.put("message", "欢迎来到神奇的考拉世界!");
//6.创建 Writer 对象
Writer out =new FileWriter(new File("d:\\test.html"));
//7.输出
template.process(map, out);
//8.关闭 Writer 对象
out.close();
FTL 指令
assign 指令
<#assign info={'mobile':'13301112222','address':'北京昌平区王府街'}>
include 指令
此指令用于模板文件的嵌套
<#include “head.ftl”>
if 指令
<#if success==true>
已登录
</#if>
list 指令
商品价格表:<br>
<#list goodsList as goods>
${goods_index+1}
${goods.name}
价格:${goods.price}<br>
</#list>
内建函数
内建函数语法格式: 变量+?+函数名称
获取集合大小
${goodsList?size}
转换字符串为 JSON 对象
<#assign text="{'bank':'工商银行','account':'10101920201920212'}" />
<#assign data=text?eval />
日期格式化
当前日期:${today?date}
当前时间:${today?time}
当前日期+时间:${today?datetime}
日期格式化:
${today?string("yyyy 年 MM 月")}
代码中对变量赋值:
dataModel.put("today", new Date());
结果:
当前日期:2019-5-6
当前时间:15:25:68
当前日期+时间:2068-5-9 15:65:85
日期格式化:2017年3月
空值处理运算符
判断某变量是否存在:“??”
<#--空值处理-->
<#if info?? >
info 为空
<#else>
${info}
</#if>
缺失变量默认值:“!”
我们除了可以判断是否为空值,也可以使用!对 null 值做转换处理
地址(为空时不显示):
${address!""}
运算符
算数运算符
FreeMarker 表达式中完全支持算术运算,FreeMarker 支持的算术运算符包括:+, - , * , / , %
逻辑运算符
逻辑运算符有如下几个:
逻辑与:&&
逻辑或:||
逻辑非:!
逻辑运算符只能作用于布尔值,否则将产生错误
比较运算符
表达式中支持的比较运算符有如下几个:
1.=或者==:判断两个值是否相等.
2.!=:判断两个值是否不等.
3.>或者 gt:判断左边值是否大于右边值
4.>=或者 gte:判断左边值是否大于等于右边值
5.<或者 lt:判断左边值是否小于右边值
6.<=或者 lte:判断左边值是否小于等于右边值
注意:
=和!=可以用于字符串,数值和日期来比较是否相等,但=和!=两边必须是相同类型的值,
否则会产生错误,而且 FreeMarker 是精确比较,“x”,"x ","X"是不等的.其它的运行符可以作用于
数字和日期,但不能作用于字符串,大部分的时候,使用 gt 等字母运算符代替>会有更好的效果,
因为 FreeMarker 会把>解释成 FTL 标签的结束字符,当然,也可以使用括号来避免这种情况,
如:<#if (x>y)>