freemarker入门

什么是FreeMarker

FreeMarker 是一款模板引擎:即一种基于模板、用来生成输出文本(任何来自于 HTML格式的文本用来自动生成源代码)的通用工具

FreeMarker 实际上是被设计用来生成 HTML 页面

FreeMarker使用入门

模板  +  数据模型  =  输出

1、创建Configuration,生成模板实例

  Configuration configuration = new Configuration();

  configuration.setDirectoryForTemplateLoading(new File("ftl文件位置"));

2、指定使用模板文件,生成Template实例

  Template template = configuration.getTemplate("flt文件名");

3、填充数据模型,数据模型就是一个Map

  Map<String, String> map = new HashMap<String, String>();

  map.put(key, value);

4、调用Template实例process完成数据合并

        template.process(map, 目标Writer输出流);

FreeMarker模板文件

扩展名.ftl文件 (采用.html文件也可以)

模板文件由四部分组成

文本:直接输出的部分

注释:即<#-- -->格式部分 不会输出

变量值:${} #{}

FTL指令 :FreeMarker指令 类似HTML标签,名称前加# 例如 <#list>

FreeMarker 常用指令

if 指令 --- 条件判断

     Welcome ${user}<#if user == "Big Joe">, our beloved leader</#if> !

     <#if animals.python.price < animals.elephant.price>

             Pythons are cheaper than elephants today.

     <#else>

            Pythons are not cheaper than elephants today.

     </#if>

list指令 --- 集合遍历

     <#list animals as being>

          <tr><td>${being.name}<td>${being.price} Euros

     </#list>

include指令 --- 页面包含

     <#include "/copyright_footer.html">

处理不存在变量

不论在哪里引用变量,都可以指定一个默认值来避免变量丢失这种情况, 通过在变量名后面跟着一个!和默认值

<h1>Welcome ${user!"Anonymous"}!</h1>

通过放置??来询问 FreeMarker 一个变量是否存在。将它和 if指令合并,那么如果 user 变量不存在的话将会忽略整个问候代码段

<#if user??><h1>Welcome ${user}!</h1></#if>

内置函数

字符串使用的内建函数:

html:  字符串中特殊 HTML 字符需要用实体引用代替(比如<代替&lt;

cap_first:字符串的第一个字母变为大写形式

lower_case:字符串的小写形式

upper_case:字符串的大写形式

trim:去掉字符串首尾的空格

序列使用的内建函数:

size:序列中元素的个数

数字使用的内建函数:

int:数字的整数部分(比如-1.9?int 就是-1

使用freemarker生成静态缓存文件

测试最终效果(如果实现成功,在界面中执行一次,即会在webapp路径下创建的freemarker中生成一个以ID值为名称的html静态网页)

注意模板的存放位置:

通常模板文件 放在 WEB-INF 下 或者 classes 下