注释:<#-- ... -->
<#-- 使用FTL指令 -->
<#-- 使用FTL指令 -->
<#-- list循环显示 -->
<#list animals as animal>
<li>${animal.name} for ${animal.price}
</#list>
注意事项:
${..}
只能用于文本部分
,
不能用于表达式
<#-- 数据格式化显示 -->
<#-- 插值结果为数字值 -->
${answer?string.number}
${answer?string.currency}
${answer?string.number}
${answer?string.currency}
${answer?string.percent}
<#-- 插值结果为日期值 -->
${lastUpdated?string("yyyy-MM-dd HH:mm:ss zzzz")}
${lastUpdated?string("EEE, MMM d, ''yy")}
${lastUpdated?string("yyyy-MM-dd HH:mm:ss zzzz")}
${lastUpdated?string("EEE, MMM d, ''yy")}
${lastUpdated?string("EEEE, MMMM dd, yyyy, hh:mm:ss a '('zzz')'")}
<#-- 小数位数字格式化 -->
<#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 -->
<#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 -->
<#--
FreeMarker
支持如下转义字符
:-->
\";
双引号
(u0022)\'; 单引号 (u0027)
\\; 反斜杠 (u005C)
\n; 换行 (u000A)
\r; 回车 (u000D)
\t;Tab(u0009)
\b; 退格键 (u0008)
\f;Form feed(u000C)
\l;<
\g;>
\a;&
\{;{
\xCode;
直接通过
4
位的
16
进制数来指定
Unicode
码
,
输出该
unicode
码对应的字符
.
<#--map集合 -->
<#assign root={"book":"struts2,fremmarker","study":"java,c#"} >
可以通过如下语法来截取子串
:${book[0]}${book[4]} // 结果是 su
${book[1..4]} //结果是tru
map集合值合并:
<#assign scores = {"
语文
":86,"
数学
":78} + {"
数学
":87,"Java":93}>
<#-- list集合 -->
<#list ["
星期一
", "
星期二
", "
星期三
", "
星期四
", "
星期五
", "
星期六
", "
星期天
"] as x>
${x}
</#list>
<#-- list集和运算 -->
<#list ["
星期一
","
星期二
","
星期三
"] + ["
星期四
","
星期五
","
星期六
","
星期天
"] as x>
${x}
</#list>
输出结果是
:
星期一
星期二
星期三
星期四
星期五
星期六
星期天
<#-- 变量连接 -->
${"hello, ${user}!"} //
使用第一种语法来连接
${"hello, " + user + "!"} // 使用 + 号来连接
${"hello, " + user + "!"} // 使用 + 号来连接
比较运算符
表达式中支持的比较运算符有如下几个
:
1,= 或者 ==: 判断两个值是否相等 .
2,!=: 判断两个值是否不等 .
3,> 或者 gt: 判断左边值是否大于右边值
4,>= 或者 gte: 判断左边值是否大于等于右边值
5,< 或者 lt: 判断左边值是否小于右边值
1,= 或者 ==: 判断两个值是否相等 .
2,!=: 判断两个值是否不等 .
3,> 或者 gt: 判断左边值是否大于右边值
4,>= 或者 gte: 判断左边值是否大于等于右边值
5,< 或者 lt: 判断左边值是否小于右边值
6,<=或者lte:判断左边值是否小于等于右边值
逻辑运算符
逻辑运算符有如下几个
:
逻辑与 :&&
逻辑或 :||
逻辑非 :!
逻辑与 :&&
逻辑或 :||
逻辑非 :!
逻辑运算符只能作用于布尔值
,
否则将产生错误
html:
对字符串进行
HTML
编码
cap_first: 使字符串第一个字母大写
lower_case: 将字符串转换成小写
upper_case: 将字符串转换成大写
1, 一元运算符 :!
2, 内建函数 :?
3, 乘除法 :*, / , %
4, 加减法 :- , +
5, 比较 :> , < , >= , <= (lt , lte , gt , gte)
6, 相等 :== , = , !=
7, 逻辑与 :&&
8, 逻辑或 :||
cap_first: 使字符串第一个字母大写
lower_case: 将字符串转换成小写
upper_case: 将字符串转换成大写
trim:去掉字符串前后的空白字符
size:
获取序列中元素的个数
int:
取得数字的整数部分
,
结果带符号
运算符的优先级
FreeMarker
中的运算符优先级如下
(
由高到低排列
):1, 一元运算符 :!
2, 内建函数 :?
3, 乘除法 :*, / , %
4, 加减法 :- , +
5, 比较 :> , < , >= , <= (lt , lte , gt , gte)
6, 相等 :== , = , !=
7, 逻辑与 :&&
8, 逻辑或 :||
9,数字范围:..
if
指令
<#assign age=23>
<#if (age>60)> 老年人
<#if (age>60)> 老年人
<#elseif (age>40)>中年人
<#elseif (age>20)>
青年人
<#else>
少年人
</#if>
switch , case , default , break
指令
<#assign type="java">
<#switch type>
<#case "java"> this is Java <#break>
<#case "C#">this is C# <#break>
<#default>this other language
</#switch>
<#list ["
星期一
", "
星期二
", "
星期三
", "
星期四
", "
星期五
", "
星期六
", "
星期天
"] as x>
${x_index + 1}.${x}<#if x_has_next>,</if>
<#if x="
星期四
"><#break></#if>
</#list>
include
指令
<#include filename [options]>
options:
该参数可以省略
,
指定包含时的选项
,
包含
encoding
和
parse
两个选项
,
其中
encoding
指定包含页面时所用的解码集
,
而
parse
指定被包含文件是否作为
FTL
文件来解析
,
如果省略了
parse
选项值
,
则该选项默认是
true
import
指令
<#import "/lib/common.ftl" as com>
noparse
指令
noparse
指令指定
FreeMarker
不处理该指定里包含的内容
<#noparse>...</#noparse>
escape , noescape
指令
escape
指令导致
body
区的插值都会被自动加上
escape
表达式
,
但不会影响字符串内的插值
,
只会影响到
body
内出现的插值
,
使用
escape
指令的语法格式如下
:
<#escape identifier as expression>...
<#noescape>...</#noescape>
<#escape identifier as expression>...
<#noescape>...</#noescape>
</#escape>
setting
指令
该指令用于设置
FreeMarker
的运行环境
,
该指令的语法格式如下
:<#setting name=value>
macro , nested , return
指令
macro
可以用于实现自定义指令
,
通过使用自定义指令
,
可以将一段模板片段定义成一个用户指令
<#macro name param1 param2 ... paramN>
name:name
属性指定的是该自定义指令的名字
,
使用自定义指令时可以传入多个参数
paramX: 该属性就是指定使用自定义指令时报参数 , 使用该自定义指令时 , 必须为这些参数传入值
nested 指令 :nested 标签输出使用自定义指令时的中间部分
nested 指令中的循环变量 : 这此循环变量将由 macro 定义部分指定 , 传给使用标签的模板
paramX: 该属性就是指定使用自定义指令时报参数 , 使用该自定义指令时 , 必须为这些参数传入值
nested 指令 :nested 标签输出使用自定义指令时的中间部分
nested 指令中的循环变量 : 这此循环变量将由 macro 定义部分指定 , 传给使用标签的模板
return指令:该指令可用于随时结束该自定义指令