①导入
<dependencies>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>
</dependencies>
②写模板
<html>
<head>
<meta charset="utf-8">
<title>Freemarker入门小DEMO </title>
</head>
<body>
<#--我只是一个注释,我不会有任何输出 -->
${name},你好。${message}
</body>
</html>
③编写java
public static void main(String[] args) throws IOException, TemplateException {
Configuration configuration = new Configuration(Configuration.getVersion());
configuration.setDirectoryForTemplateLoading(new File("D:/temp"));
configuration.setDefaultEncoding("utf-8");
Template template = configuration.getTemplate("index.ftl");
Map map=new HashMap();
map.put("name", "张三");
map.put("message", "hello freemarder!");
Writer out=new FileWriter(new File("D:/temp/index.html"));
template.process(map, out);
out.close();
}
然后会在指定的路径名下根据map的内容动态的生成html文件。
模板文件中四种元素
1、文本,直接输出的部分
2、注释,即<#--...-->格式不会输出
3、插值(Interpolation):即${..}部分,将使用数据模型中的部分替代输出
4、FTL指令:FreeMarker指令,和HTML标记类似,名字前加#予以区分,不会输出。
assign指令
此指令用于在页面上定义一个变量
(1)定义简单类型:
<#assign linkman="周先生"> 联系人:${linkman} |
(2)定义对象类型:
<#assign info={"mobile":"13301231212",'address':'北京市昌平区王府街'} > 电话:${info.mobile} 地址:${info.address} |
include指令:将一些公共的东西抽取出来灵活使用
我们修改index.ftl,在模板文件中使用include指令引入刚才我们建立的模板,
<#include "head.ftl"> |
if指令
在模板文件上添加
<#if success=true> 你已通过实名认证 <#else> 你未通过实名认证 </#if> |
在代码中对str变量赋值
map.put("success", true); |
在freemarker的判断中,可以使用= 也可以使用==
list指令
在Map中添加集合数据goodsList
----商品价格表----<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 />
开户行:${data.bank} 账号:${data.account}
日期格式化
dataModel.put("today", new Date());
页面中进行格式化
当前日期:${today?date} <br> 2017-5-24
当前时间:${today?time} <br> 17:58:41
当前日期+时间:${today?datetime} <br>
日期格式化: ${today?string("yyyy年MM月")}
数字转为字符串:发现过大的数字是有默认的样式,每三位有一个都好分隔。
累计积分:${point?c}
空值处理运算符
<#if aaa??>
aaa变量存在
<#else>
aaa变量不存在
</#if>
缺失变量默认值:为null时进行默认值设置,aaa为null 显示 -
${aaa!'-'}
运算符:FreeMarker支持的算术运算符包括:+, - , * , / , %
逻辑运算符
逻辑与:&&
逻辑或:||
逻辑非:!
逻辑运算符只能作用于布尔值,否则将产生错误
比较运算符
1. =或者==:判断两个值是否相等.
2. !=:判断两个值是否不等.
3. >或者gt:判断左边值是否大于右边值
4. >=或者gte:判断左边值是否大于等于右边值
5. <或者lt:判断左边值是否小于右边值
6. <=或者lte:判断左边值是否小于等于右边值
注意:=和!=可以用于字符串,数值和日期来比较是否相等,但=和!=两边必须是相同类型的值,否则会产生错误,而且FreeMarker是精确比较,"x","x ","X"是不等的.其它的运行符可以作用于数字和日期,但不能作用于字符串,大部分的时候,使用gt等字母运算符代替>会有更好的效果,因为 FreeMarker会把>解释成FTL标签的结束字符,当然,也可以使用括号来避免这种情况,如:<#if (x>y)>