【freemarker】freemarker学习笔记
Freemarker学习笔记
Freemarker是使用java编写的一个模版引擎框架,网页静态化的解决方案。也可以用来生成xml,jsp和java。
一、模版文件
创建freemarker模版文件用于生成html文件。模版文件包含文本、注释、插值、指令。
- 文本:直接输出的部分。
- 注释:即
<#-- ...... -->
格式,不会输出。 - 插值:即
${...}
部分。用数据模型中的数据代替输出。 - 指令:和html代码类似,
<# >
开头#,予以区分。
二、指令
-
<#assign name="值">
在模版中定义一个变量,name是变量名。可以用${name}来获取变量的值。<#assign name="王先森">
欢迎,${name}
-
<#include "文件路径">
,引入文件。 -
<#if> <#elseif> <#else>
条件指令<#if num==1>
是1,执行此处
<#elseif num==2>
是2,执行此处
<#else>
否则执行此处
</#if>
-
<#list>
循环 goodsList是集合,goods是循环的每个对象。${goods_index}固定语法,取下标。<#list goodsList as goods>
${goods.name}
</#list>
三、内建函数
-
size:获取集合长度。freemarker中的函数使用"?"来调用而不是“.”
${goods?size} <#-- freemarker中的函数使用"?"来调用而不是“.” -->
-
eval:转换
<#assign text="{'bank':'工商银行', 'account': '123454566'}"> <#-- 定义一个text字符串 -->
<#assign data=text?eval> <#-- 把text转换为对象赋值给data -->
开户行:${data.bank} 帐号:${data.account}
-
日期格式化行数。
java代码中定义一个日期 map.put("tody", new Date());
freemarker代码:
${tody?date} <#-- 只显示日期 -->
${tody?time} <#-- 只显示时间 -->
${tody?datetime} <#-- 显示日期和时间 -->
${tody?string('yyyy年MM月')} <#-- 日期格式化,按照定义个格式输出日期 -->
-
数字格式化
定义参数data为12345678
${data} <#-- 会输出12,345,678。会按照金额的方式显示 -->
${data?c} <#-- 输出12345678,正常显示 -->
四、控制处理运算符
在freemarker中,如果变量值是空则会抛出异常。但是有些变量就是null值,该怎样解决呢?
-
variable??
,如果变量存在返回true,否则返回false。<#if aa??>
aa变量存在
<#else>
aa变量不存在
</#if>
-
variable!''
感叹号后面可以是空字符串,也可以设置默认值。${aaa!"aa"} <#-- 如果aaa不存在则输出aa -->
五、运算符
-
算数运算符。
freemarker中支持算数运算符,包括:
+ - * / %
-
逻辑运算符,逻辑运算符只能作用于布尔值,否则会产生错误。
- &&:逻辑与
- || :逻辑或
- ! :逻辑非
-
比较运算符。
- =或者==:判断两个值是否相等。
- !=:判断两个值是否不等。
- >或
>
:判断是否大于。 - <或
<
:判断是否小于。 - <=或
<e:判断是否小于等于。
注意:=和!=判断两边必须是相同类型的值,否则会报错。
六、创建一个demo来生成freemarker模版。
-
创建一个maven项目。引入freemarkerjar包。
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>
-
新建一个模版文件test.ftl,一般以.ftl后缀结尾。
<!DOCTYPE html>
<html>
<head>
<title>测试freemarker</title>
<meta charset="UTF-8">
<body>
<h1>这是一个Freemarker测试模版</h1>
<span>${name},你好!!${message}</span>
<#assign name="值">
hello,${name}
</body>
</head>
</html>
-
创建freemarker的配置文件。
package com.wj.test;
import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;
import freemarker.template.Configuration;
import freemarker.template.Template;
public class FreemarkerConfiguration {
public static void main(String[] args) throws Exception {
// 创建一个配置对象
Configuration configuration = new Configuration(Configuration.getVersion());
// 设置模版所在目录
configuration.setDirectoryForTemplateLoading(new File("D:\\workspace\\test_workspace\\freemarker-demo\\src\\main\\resources"));
// 设置字符集
configuration.setDefaultEncoding("UTF-8");
// 获取模版对象
Template template = configuration.getTemplate("test.ftl");
// 创建数据模型,可以是对象,也可以是map
Map<String, String> map = new HashMap<String, String>();
map.put("name", "WJ");
map.put("message", "欢迎使用Freemarker");
// 创建输出流对象
Writer out = new FileWriter("D:\\test.html");
// 输出
template.process(map, out);
System.out.println("生成成功");
// 关闭out
out.close();
}
}
这样就可以在指定的文件夹中生成自己定义的freemarker模版。