Freemarker的介绍
Freemarker 是一款模板引擎,是一种基于模版生成静态文件的通用 工具,它是为Java程序员提供的一个开发包,或者说是一个类库,它不是面向最终用户的,而是为程序员提供了一款可以嵌入他们开发产品的应用程序。
Freemarker 是使用纯java编写的,为了提高页面的访问速度,需要把页面静态化, 那么Freemarker就是被用来生成html页面。
到目前为止,Freemarker使用越来越广泛,不光光只是它强大的生成技术,而且它能够与Spring进行很好的集成。
0、FTL指令规则
开始标签;结束标签;自结束标签;
1、注释
<#-- 我是注释 -->
2、if elseif else
<#if u.username = '小白5'>
${u.password}
</#if>
<#if u.username = '小白5'>
****
<#else>
${u.password}
</#if>
<#if u.username = '小白5'>
****
<#elseif u.password == '保密'>
密码被保密
<#else>
${u.password}
</#if>
3、遍历集合、获取集合长度、集合元素的下标
<#list users as u> <#-- users是从后台传的user对象 -->
<div>
<span title="我是下标">${u_index+1}、</span>
用户名:<span>${u.username}</span>,
密码:<span>
<#if u.username = '小白5'>
****
<#elseif u.password == '保密'>
密码被保密
<#else>
${u.password}
</#if>
</span>
</div>
</#list>
集合长度:
<#-- 如果users集合存在 并且 集合长度大于0 -->
<#if (users ??) && (users ? size > 0)>
${users ? size}
<#else>
0
</#if>
获取集合的第1个元素
<#list users as u>
<#if u_index == 0>
<#assign users0_username = "${u.username}" />
${u_index}、${u.username},${u.password}<br>
<#break><#-- 结束循环 -->
</#if>
</#list>
第一个元素的用户名:
${users0_username}
取集合的前3条数据:
<#assign n=0 />
<#list users as u>
<#if n lt 3>
${u.username}
</#if>
<#if n gt 3>
更多>>
<#break>
</#if>
<#assign n=n+1 />
</#list>
4、include指令(导入txt文件)
<#include "readme.txt"/>
5、宏指令/自定义指令
<#-- 定义无参宏指令m1 -->
<#macro m1>
<b>哈哈哈~~</b>
</#macro>
<#-- 调用上面的宏指令m1 -->
<@m1/>
<@m1/>
<#-- 定义带参的宏指令m2 -->
<#macro m2 a b c>
${a},${b},${c}
</#macro>
<#-- 调用带参宏指令方式I -->
<@m2 a="小白" b="小黑" c="比丢"/><br>
<#-- 调用带参宏指令方式II -->
<@m2 "小白" "小黑" "比丢"/>
6、nested指令
<div>
<#macro border>
<table>
<tr>
<td>
<#nested>
</td>
</tr>
</table>
</#macro>
</div>
<@border>
你要输入的一大段文字!!你要输入的一大段文字!!你要输入的一大段文字!!
</@border>
7、插值
FreeMarker的插值有如下两种类型:
1)通用插值;如:${user}
2)数字格式化插值;如:#{test}或#{test;format}
${user1.username ? if_exists } <#-- 用于判断如果存在,就输出这个值 -->
${user1.username ! "xxx"} <#-- 默认值xxx -->
${testDate ? string('yyyy-MM-dd')} <#-- 日期格式 -->
<#-- 三种不同的数字格式 -->
${testNumber ? string.number} <#-- 20 -->
${testNumber ? string.currency} <#-- $20.00 -->
${testNumber ? string.percent} <#-- 2000% -->
${.now?datetime} <#-- 当前时间戳 -->
注:FreeMarker提供两个运算符来避免空值:
1)! 指定缺失变量的默认值;
! 运算符有两种用法:variable ! 或 variable ! defaultValue。第一种用法不给变量指定默认值,表明默认值是空字符串、长度为0的集合、或长度为0的Map对象。
<#-- ${user2} 没有定义这个变量,会报异常! -->
${user2!} <#--没有定义这个变量,默认值是空字符串! -->
${user2 ! "abc"} <#--没有定义这个变量,默认值是字符串abc! -->
2)?? 判断变量是否存在;
?? 运算符返回布尔值,如:variable??,如果变量存在,返回true,否则返回false。将它和 if指令合并,那么如果 user1变量不存在的话将会忽略整个问候代码段
<#if user1 ??>
<h1>Welcome ${user1.username}!</h1>
</#if>
8、Freemarker中对于javabean的处理跟EL表达式一致!
有一点需要注意: ${sth...}只能用于文本部分作为字符串输出,不能用于判断真假值,
也就是不能这么写:<#if ${flag}>呐呐呐!</#if>,应为<#if flag>呐呐呐!</#if>
9、assign指令用于为该模板页面创建或替换一个顶层变量
<#assign x="Hello ${user1.username}!"/>
${x}
<#assign x>
<#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as n>
${n}
</#list>
</#assign>
${x}