Freemarker指令(FTL标签)
if指令
使用if指令可以有条件的跳过模板的一部分,和其他语言的if相似的。下面是一个示例,
如果张三是老板的话:
<html>
<body>
欢迎你,${user.name}
<#if user.name == “张三”>
,亲爱的老板
</#if>
</body>
</html>
else指令
else指令是嵌套在if指令里面
<html>
<body>
欢迎你,
<#if user.name == “张三”>
亲爱的老板
<#else>
${user.name}
</#if>
</body>
</html>
如果user.name==“李四”,那么输出的文本为:
<html>
<body>
欢迎你,李四
</body>
</html>
list指令
list指令是在需要用到循环输出数据的时候使用,下面是循环输出水果名称
<#list fruits as fruit>
${fruit.name}
</#list>
也可以指定一个序列,例如
<#list [‘winter’ , ’summer’ , ’autumn’ , ’spring’]as season>
${season}
</#list>
输出结果为:
winter
summer
autumn
spring
include指令
可以导入其他的文件,比如导入头文件top.html
Top.html:
<div id=”top”>
<nav>
导航栏
</nav>
</div>
Index.html:
<html>
<head>
</head>
<body>
<div id=”container”>
<#include “top.html”>
<div id=”content”>
</div>
</div>
</body>
</html>
输出的文本为:
<html>
<head>
</head>
<body>
<div id=”container”>
<div id=”top”>
<nav>
导航栏
</nav>
</div>
<div id=”content”>
</div>
</div>
</body>
</html>
插值
注意:插值只能在两种情况下使用,一个是文本区一个是字符串表达式里。在指令里不能使用插值,如<#if ${user}>${user}</#if>是错误的,正确的应该这么写<#if user> ${user}</#if>,<#if “${user}”>${user}</#if>也是错误的,因为if指令里需要的是一个布尔值,而不是一个字符串
通用插值
字符串
当freemarker插值结果为字符串时,直接输出表达式结果
数字
当插值结果为数字时,可以根据默认格式(由<#setting>指令设置)将表达式转换成文本输出,可以使用内建的字符串函数格式单个插值,如
<#settion number_format="currency"/>
<#assign answer=42/>
${answer}
${answer?string} <#-- the same as ${answer} -->
${answer?string.number}
${answer?string.currency}
${answer?string.percent}
${answer}
输出结果为:
$42.00
$42.00
42
$42.00
4,200%
日期
根据默认格式(由#setting指令设置)将表达式结果转换成文本输出.可以使用内建的字符串函数格式化单个插值,如下面的例子:
${lastUpdated?string("yyyy-MM-dd HH:mm:sszzzz")}
${lastUpdated?string("EEE, MMM d, ''yy")}
${lastUpdated?string("EEEE, MMMM dd, yyyy,hh:mm:ss a '('zzz')'")}
输出结果是:
2008-04-08 08:08:08 Pacific Daylight Time
Tue, Apr 8, '03
Tuesday, April 08, 2003, 08:08:08 PM (PDT)
布尔值
根据默认格式(由#setting指令设置)将表达式结果转换成文本输出.可以使用内建的字符串函数格式化单个插值,如下面的例子:
<#assign foo=true/>
${foo?string("yes", "no")}
输出结果是:
yes
数字格式化插值
关于FreeMarker数字格式化插值可采用#{expr;format}形式来格式化数字,其中format可以是:
mX:小数部分最小X位
MX:小数部分最大X位
如下面的例子:
<#assign x=2.582/>
<#assign y=4/>
#{x; M2} <#-- 输出2.58 -->
#{y; M2} <#-- 输出4 -->
#{x; m2} <#-- 输出2.6 -->
#{y; m2} <#-- 输出4.0 -->
#{x; m1M2} <#-- 输出2.58 -->
#{x; m1M2} <#-- 输出4.0 -->
符号的使用
!的使用
不论在哪里引用变量,都可以制定一个默认值来避免变量丢失的情况发生,可以在变量后面添加一个!和默认值。比如:
<p>你好,${username!”张三”}</p>
如果username为null或者是不存在undefined,那么模板都会表现为<p>你好,张三</p>,否则输出username的值
注意:如果是多级访问的变量,例如${user.friend.name !”张三”},则表示当user以及friend都存在的情况下,如果name不存在则默认为张三,但如果user或者friend一方不存在,freemarker就会报错,因此为了避免这种情况发生,可以这样使用${(user.friend.name)!”张三”},这种情况下不管哪个不存在都不会报错,默认值都为张三,下面的??同理。
?的使用
?在使用的时候后面需要加上关键字,例如
<#if user?exists>
${user}
</#if>
表示如果user存在的话,执行下面的操作,等同于??
${nowDate?time}
将现有时间以时间的格式显示,显示结果如:15:13:05
${nowDate?date}
以日期格式显示,如:2011-4-28
??的使用
通过在变量后面使用??表示询问该变量是否存在,一般和if指令联合使用
<#if username??>
欢迎你,${username }
</#if>
需要转义的字符
如果在文本输出的时候需要输出特殊字符,则需要进行转义,下面是需要转义的字符:
转义序列 | 含义 |
\” | 双引号 |
\’ | 单引号 |
\\ | 反斜杠 |
\n | 空格 |
\r | 回车 |
\t | Tab |
\b | 退格 |
\f | 换页 |
\l | 小于 |
\g | 大于 |
\a | 和& |
\xCode | 字符的16进制Unicode码(UCS码) |