模板"/>
Freemarker模板
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}
更多推荐
Freemarker模板
发布评论