freemarker是比较好用的网页静态化技术 ,于是写了这个博客记录下学习它的常用指令和内置函数
下面是个入门小案例:
先准备一个模板,后缀是ftl结尾的格式
<html>
<head>
<title>你好freemarker</title>
</head>
<body>
${name},欢迎您来到神奇的${message}世界
</body>
</html>
然后导包:
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>
然后编码:(注意:这里选择路径时最好选择全路径,不要选择相对路径)
//1,创建配置对象
Configuration configuration = new Configuration(Configuration.getVersion());
//2,设置要加载的模板路径,必须是个"文件夹";
configuration.setDirectoryForTemplateLoading(new File("F:\\freemarker-demo\\src\\main\\resources"));
//3,设置编码字符集
configuration.setDefaultEncoding("utf-8");
//4,通过文件名获取模板对象
Template template = configuration.getTemplate("html_template.ftl");
//5,设置数据源,可以是map或者pojo,一般选择map,更灵活
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("name", "张三");
map.put("message", "freemarker");
//创建一个输出io流,设置写出文件路径
Writer writer = new FileWriter("F:/javatest/test.html");
//执行输出
template.process(map,writer);
//关流
writer.close();
效果: 张三 , 欢迎您来到神奇的 freemarker 世界
(以下很多用的都是代码里面定义的变量..)
常用的 FTL指令
1, #assign 用于定义变量和定义一个json对象
<#assign linkman='李四'>
${linkman}
<#assign pojo={"name":"麻子","age":25,"sex":"男"}>
${pojo.name},,,${pojo.age},,,${pojo.sex}
2, #include 用于模板文件的嵌套,和html里面的include功能类似
<#include 'header.ftl'>
3, #if指令 用以判断,不同的是,它需要夹着使用,可配合#else指令一起使用
<#if success==true>
<#--ftl指令中 =和== 都是判断的意思-->
成功!
<#else>
失败!
</#if>
4, #list指令 表示遍历集合
要是想要获得循环中每个元素的索引则为$ {xxx_index}获取
<#list goodsList as goods>
序号: ${goods_index+1} 名字: ${goods.name} 价格: ${goods.price}
</#list>
内置函数 语法格式: 变量+?+函数名称
1, 获取集合的长度
集合尺寸: ${goodsList?size}
2, 转换JSON字符串为js对象
<#assign pojo='{"name":"麻子","age":25,"sex":"男"}'/>
<#--意思是 申明另外一个变量data接收pojo调用eval方法生成的js对象-->
<#assign data=pojo?eval/>
${data.name},,,${data.age},,,${data.sex}
3,日期格式化
当前日期:${today?date}
当前时间:${today?time}
当前日期+时间:${today?datetime}
日期格式化: ${today?string("yyyy 年 MM 月")}
结果效果:
当前日期:2018-11-20
当前时间:14:43:52
当前日期+时间:2018-11-20 14:43:52
日期格式化: 2018年11月
4,数字转化为字符串
<#assign number=123456789>
${number}
展示效果是: 123,456,789
当不需要中间的逗号时需要转化为字符串
${number?c}
展示效果是: 123456789
5, 空值处理运算符
判断某变量是否存在:“??”
用法为:variable??,如果该变量存在,返回 true,否则返回 false
<#if aaa??>
aaa 变量存在
<#else>
aaa 变量不存在
</#if>
缺失变量默认值:“!”
${aaa!"}
这样表示当aaa为null时用''空字符串代替,防止变量缺失值时程序报错
6,算术运算符
这个和平时用的差不多一样,,就是注意一点,ftl语法中 = 和 == 都可用于逻辑判断
在大于小于比较时,> 可以用 gt 代替,.因为 FreeMarker 会把 > 解释成 FTL 标签的结束字符,当然,也可以使用括号()来避免这种情况