🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
> ## 在java程序中 - 导入freemarker的相关jar包 ``` <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> </dependency> ``` 1. 首先要创建一个`jtl`模板文件 2. 创建Confuguration类对象,并指定一个版本号,通常通过Confifuretion类里的常量获取。 `Configuration configuration = new Configuration(Configuration.getVersion());` 3. 通过confuguration设置`jtl`文件所在的文件夹地址 `configuration.setDirectoryForTemplateLoading(new File(ftlFilePath));` 4. confuguration设置默认的字符集 ` configuration.setDefaultEncoding("UTF-8");` 5. 通过confuguration获取一个模板,传入`jtl`文件名称 `Template template = configuration.getTemplate("fileName.ftl");` 6. 写入数据通常是map,也可是pojo对象 `Map map = new HashMap();` 7. 创建一个Writer对象 `Writer writer = new FileWriter("outputFile");` 8. 通过模板对象process方法处理数据 ` template.process(map, writer);` 9. 关闭流 `writer.close();` * [ ] * 在开发中可以配合InputStreamReader (ByteArrayInputStream)和 OutputStreamWriter(ByteArrayOutputStream)使用。如邮件发送页面。 > ## `jtl`语句 - 获取map数据 `${key}` key为map的键值 - 获取pojo数据 `${key.field}` key为pojo对象存入map的键值,field为存入pojo的属性 - 循环列表 ``` <#list key as item> // key为list存入map的键值,item为自己定义的遍历对象名称 ${item.key|filed} // 无论list存入的是pojo对象还是map对象,都是通过`.`的方式获取值,'.'后面可是键值或者属性 ${item_index} // 可以获取当前遍历对象的序号(序号从0开始) </#list> ``` - 判断 `if` `else`语句 ``` <#if true> // 再标签中写判断语句时不需要写${} 如 value!=2 为true时执行到这里 <#else> 否则执行这里 </#if> ``` - 时间显示 `${key?date}` // key为传入时间对象的键值,跟date表示只显示日期 `${key?time}` // key为传入时间对象的键值,跟time表示只显示时间,不显示日期 `${key?datetime}` // key为传入时间对象的键值,跟datetime表示显示日期时间 `${key?string(pattern)}` // key为传入时间对象的键值,表示自己定义时间模板如`${key?string("yyyy年MM月dd日 HH:mm:ss")}` - 空值处理 `${key!} `//当获取的值为null时,在其后加入'!'表示默认值为`""` `${key!defaultValue} ` //当获取的值为null时,可以定义默认的值。如 `${key!"123"} ` ` <#if key??> </# if> ` // 也可使用`if`语句定义空值 - include `<#include jtlName>` // jtlName为包含文件名称,如`<#include "hello.jtl">`