1.概述
FreeMarker模板文件主要有5个部分组成:
- 数据模型:模板能用的所有数据
- 文本,直接输出的部分
- 注释,即<#–…–>格式不会输出
- 插值(Interpolation):即${…}或者#{…}格式的部分,将使用数据模型中的部分替代输出
- FTL指令:FreeMarker指令,和HTML标记类似,名字前加#予以区分,不会输出。
2.数据模型
FreeMarker(还有模板开发者)并不关心数据是如何计算的,FreeMarker 只是知道真实的数据是什么。模板能用
的所有数据被包装成 data-model 数据模型
3.模板的常用标签
在FreeMarker模板中可以包括下面几个特定部分:
- ${…}:称为interpolations,FreeMarker会在输出时用实际值进行替代。
${name}可以取得root中key为name的value。
${person.name}可以取得成员变量为person的name属性 - <#…>:FTL标记(FreeMarker模板语言标记):类似于HTML标记,为了与HTML标记区分
- <@>:宏,自定义标签
- 注释:包含在<#–和–>(而不是)之间
4.模板的常用指令
- if指令
分支控制语句
<#if condition>
....
<#elseif condition2>
...
<#elseif condition3>
...
<#else>
...
</#if>
- list、break指令
list指令时一个典型的迭代输出指令,用于迭代输出数据模型中的集合
<#list sequence as item>
...
</#list>
除此之外,迭代集合对象时,还包括两个特殊的循环变量:
a、item_index:当前变量的索引值。
b、item_has_next:是否存在下一个对象
也可以使用<#break>指令跳出迭代
<#list ["星期一","星期二","星期三","星期四","星期五"] as x>
${x_index +1}.${x} <#if x_has_next>,</#if>
<#if x = "星期四"><#break></#if>
</#list>
- include 指令
include指令的作用类似于JSP的包含指令,用于包含指定页,include指令的语法格式如下
<#include filename [options]></#include>
在上面的语法格式中,两个参数的解释如下
a、filename:该参数指定被包含的模板文件
b、options:该参数可以省略,指定包含时的选项,包含encoding和parse两个选项,encoding
指定包含页面时所使用的解码集,而parse指定被
包含是否作为FTL文件来解析。如果省略了parse选项值,则该选项值默认是true
- assign指令
它用于为该模板页面创建或替换一个顶层变量
<#assign name = zhangsan />
- 内置函数
FreeMarker还提供了一些内建函数来转换输出,可以在任何变量后紧跟?,?后紧跟内建函数,就可通过内建函
数来转换输出变量。下面是常用的内建的字符串函数:
?html:html字符转义
?cap_first: 字符串的第一个字母变为大写形式
?lower_case :字符串的小写形式
?upper_case :字符串的大写形式
?trim:去掉字符串首尾的空格
?substring:截字符串
?lenth: 取长度
?size: 序列中元素的个数
?int : 数字的整数部分(比如- 1.9?int 就是- 1)\
?replace:字符串替换
示例:
<#-- assign指令 : 再ftl模板中定义数据存入到root节点下
<#assign name="zhangsan">
-->
<#--
${name}
欢迎您:${username}
-->
<#-- 获取数据 ${根节点下的数据....属性} -->
<#-- if指令
<#if flag=1>
传入数据=1
<#elseif flag=2>
传入数据=2
<#else>
传入数据=其他
</#if>
-->
<#-- list指令 : 循环迭代
数据名称 as 别名
<#list weeks as abc>
${abc_index} = ${abc}
</#list>
-->
<#--模板包含 include
<#include "template02.ftl" >
-->
${username?lower_case}