freemarker的使用

  • 格式:pdf
  • 大小:84.70 KB
  • 文档页数:3

freemarker的使⽤

⼀:freemarker是什么?

freemarker是⼀个模板引擎,基于定义的模板和数据⽣成对应的⽂本(HTML,xml,java等),是⼀个⽣成⽂本的⼯具。

⼆:freemarker的使⽤⽅法

(1)在⼯程中引⼊freemarker相关的依赖

org.freemarker

freemarker

2.3.23

View Code

(2)使⽤的步骤

第⼀步:创建⼀个Configuration对象,直接new⼀个即可,构造参数是freemarker的版本号

第⼆步:设置模板⽂件所在的路径,需要给出在磁盘上储存的全路径

第三步:设置⽣成的⽂件的编码格式,⼀般为utf-8格式

第四步:加载模板,创建模板对象

第五步:创建模板使⽤的数据集,可以使pojo也可以是map类型的

第六步:创建Write流对象,将⽂件⽂件输出,需要指定⽣成的⽂件的名称

第七步:调⽤模板的process⽅法,⽣成相应的⽂本

第⼋步:关闭流

@Test

public void genFile() throws Exception {

// 第⼀步:创建⼀个Configuration对象,直接new⼀个对象。构造⽅法的参数就是freemarker对于的版本号。

Configuration configuration = new Configuration(Configuration.getVersion());

// 第⼆步:设置模板⽂件所在的路径。

configuration.setDirectoryForTemplateLoading(new File("D:/workspace/item-web/src/main/webapp/WEB-INF/ftl"));

// 第三步:设置模板⽂件使⽤的字符集。⼀般就是utf-8.

configuration.setDefaultEncoding("utf-8");

// 第四步:加载⼀个模板,创建⼀个模板对象。

Template template = configuration.getTemplate("hello.ftl");

// 第五步:创建⼀个模板使⽤的数据集,可以是pojo也可以是map。⼀般是Map。

Map dataModel = new HashMap<>();

//向数据集中添加数据

dataModel.put("hello", "this is my first freemarker test.");

// 第六步:创建⼀个Writer对象,⼀般创建⼀FileWriter对象,指定⽣成的⽂件名。

Writer out = new FileWriter(new File("D:/temp/out/hello.html"));

// 第七步:调⽤模板对象的process⽅法输出⽂件。

template.process(dataModel, out);

// 第⼋步:关闭流。

out.close();

}

(3)模板的语法

1.访问map中的key

${key}即可获得对应的value值

2.访问pojo中的属性

以student对象为例: ${student.id} ${student.name}即可取得student对象中的id值和name值

3.去集合中的元素

例如:遍历学⽣对象集合,取出每⼀个学⽣的id值和name值

<#list studentList as student>

${student,id} ${student.name}

<#list>4.取集合中的下标

<#list studentList as student>

对象+下划线+index 即可获得下标值

${student_index}

<#list>

5.判断

<#list sutdnetList as student>

进⾏奇偶数的判断

<#if student_index % 2 ==0>

//偶数的处理过程

<#else>

//奇数的处理过程

<#if>

<#list>

6.⽇期类型的格式化

${date?date} 当前⽇期

${date?time} 当前时间

${date?datetime} 当前⽇期和时间

${date?string("yyyy-MM-dd hh:mm:ss")} 设置⽇期格式

7.NULL的处理

!对输出的控制处理,只输出,⽆返回值

${name} 如果name为空就会报错

${name!}如果name为空,不会报错,没有输出

${name!"默认值'} 如果name为空,就会输出默认值

${name!666}如果name为空,会输出666

${student.name}如果student或者name为空,报错

${student.name!"默认值"}如果student为空,会报错,name为空,输出默认值

测试是否为null,返回Boolean类型的值

product.color??将只测试color是否为null

󰀀(product.color)??将测试product和color是否存在null 󰀀

??和?的区别

是判断对象是否为空,例如:<#if object??>object对象不为空(即object存在)

后⾯要加内建函数名,例如:<#if object?exists>object对象不为空(即object存在)

<#if str??>${str?string}<#--将str以字符串形式显⽰-->

8.include标签

<#include “模板名称“>

三:freemarker和spring的整合

(1)将Configuration对象的创建交给spring统⼀管理,为该对象注⼊两个属性,模板路径和⽂件的编码格式

class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">

View Code

(2)进⾏测试

@Controller

public class HtmlGenController {

@Autowired

private FreeMarkerConfigurer freeMarkerConfigurer;

@RequestMapping("/genhtml")

@ResponseBody

public String genHtml()throws Exception {

// 1、从spring容器中获得FreeMarkerConfigurer对象。

// 2、从FreeMarkerConfigurer对象中获得Configuration对象。

Configuration configuration = freeMarkerConfigurer.getConfiguration();

// 3、使⽤Configuration对象获得Template对象。

Template template = configuration.getTemplate("hello.ftl");

// 4、创建数据集

Map dataModel = new HashMap<>();

dataModel.put("hello", "1000");

// 5、创建输出⽂件的Writer对象。

Writer out = new FileWriter(new File("D:/temp/term197/out/spring-freemarker.html"));

// 6、调⽤模板对象的process⽅法,⽣成⽂件。

template.process(dataModel, out);

// 7、关闭流。

out.close();

return "OK";

}

}

View Code

错误的地⽅希望⼤家指正。