第一步:引入jar包
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>
第二步:建立相关文件
2.1:建立一个ftl模板的文件,我这里建立在项目目录下的resource目录下,建立一个hello.ftl文件,ftl是freemaker的文件拓展名,hello.ftl其内容很简单,可以认为是一个EL表达式去取值
${hello}
2.2:建立一个文件作为输出的结果的地方,拓展名任意,我这里就在左面建立一个1.html
C:/Users/xiaomi/Desktop/freemaker/1.html
第三步:建立测试方法
@Test
public void fun01() throws Exception{
// 第一步:创建一个Configuration对象,直接new一个对象。构造方法的参数就是freemarker对于的版本号。
Configuration configuration = new Configuration(Configuration.getVersion());
// 第二步:设置模板文件所在的路径。
configuration.setDirectoryForTemplateLoading(new File("D:/JavaPractice/Maven/freemaker/src/main/resources"));
// 第三步:设置模板文件使用的字符集。一般就是utf-8.
configuration.setDefaultEncoding("utf-8");
// 第四步:加载一个模板,创建一个模板对象。
Template template = configuration.getTemplate("hello.ftl");
// 第五步:创建一个模板使用的数据集,可以是pojo也可以是map。一般是Map。
Map<String, Object> map = new HashMap<String,Object>();
map.put("hello","hello freemaker!!!");
// 第六步:创建一个Writer对象,指定生成的文件名。
FileWriter writer = new FileWriter(new File("C:/Users/xiaomi/Desktop/freemaker/1.html"));
// 第七步:调用模板对象的process方法输出文件。
template.process(map, writer);
// 第八步:关闭流。
writer.close();
}
第四步:查看1.html,就会输出hello freemaker!!!内容,就是自己设置的!
前面已近说了freemaker的简单使用,接下说一下其相关简单语法的使用,存值放在map中,模板通过key来获取!整体上感觉跟EL表达式差不多!!举例如下
pojo:
测试代码:
Map<String, Object> map = new HashMap<String,Object>();
Persion persion = new Persion("gxm", 21, "男");
map.put("persion",persion);
模板:
姓名:${persion.name}
年龄:${persion.age}
性别:${persion.sex}
结果:
姓名:gxm
年龄:21
性别:男
循环:
测试代码:
Map<String, Object> map = new HashMap<String,Object>();
Persion persion1 = new Persion("gxm01", 21, "男");
Persion persion2 = new Persion("gxm02", 21, "男");
Persion persion3 = new Persion("gxm03", 21, "男");
List<Persion> persionList = new ArrayList<Persion>();
persionList.add(persion1);
persionList.add(persion2);
persionList.add(persion3);
map.put("persionList",persionList);
模板:
<#list persionList as persion>
下标:${persion_index}
姓名:${persion.name}
年龄:${persion.age}
性别:${persion.sex}
</#list>
结果:
下标:0 姓名:gxm01 年龄:21 性别:男
下标:1 姓名:gxm02 年龄:21 性别:男
下标:2 姓名:gxm02 年龄:21 性别:男
判断之IF-ELSE:
测试代码:
Map<String, Object> map = new HashMap<String,Object>();
Persion persion1 = new Persion("gxm01", 21, "男");
Persion persion2 = new Persion("gxm02", 21, "男");
Persion persion3 = new Persion("gxm03", 21, "男");
List<Persion> persionList = new ArrayList<Persion>();
persionList.add(persion1);
persionList.add(persion2);
persionList.add(persion3);
map.put("persionList",persionList);
模板:
<#list persionList as persion>
<#if persion_index%2==0>
${persion_index} : 我是偶数
<#else>
${persion_index} : 我是奇数
</#if>
下标:${persion_index}
姓名:${persion.name}
年龄:${persion.age}
性别:${persion.sex}
</#list>
结果:
0:我是偶数 下标:0 姓名:gxm01 年龄:21 性别:男
1:我是奇数 下标:1 姓名:gxm02 年龄:21 性别:男
2:我是偶数 下标:2 姓名:gxm02 年龄:21 性别:男
日期格式的处理:
问号后面表明要形成的日期格式
测试代码:
Map<Object,Object> map = new HashMap<Object,Object>();
map.put("myDate",new Date());
模板:
日期格式处理:
${myDate?date}//第一种格式
${myDate?time} //第二种格式
${myDate?datetime} //第三种格式
${myDate?string("yyyy/MM/dd HH:mm:ss")}//第四种,自己表明格式
结果:
日期格式处理: 2
2018-12-7
18:05:54
2018-12-7 18:05:54
2018/12/07 18:05:54
null值的处理:
测试代码:
Map<Object,Object> map = new HashMap<Object,Object>();
map.put("myDate",new Date());
模板:
null的处理
第一种在后面增加一个感叹号,并表示默认值:
${nullKey!"我是为null时的默认值"}
第二种在后面增加一个感叹号,但是不加默认值:
${nullKey!}
第三种使用if和else判断
<#if nullKey??>
我是空值!
<#else>
我不是空值!
</#if>
结果:
null的处理 第一种在后面增加一个感叹号,并表示默认值: 我是为null时的默认值
第二种在后面增加一个感叹号,但是不加默认值:
第三种使用if和else判断: 我不是空值!