freemaker注释:<#– 注释内容 –>格式部分,不会输出
———————————- 基础语法 ———————————-
1、字符输出
${emp.name?if_exists}
${emp.name!}
${emp.name?default("xxx")}
${emp.name!"xxx"}
2.常用内部函数:
${"123
456"?html}
${"str"?cap_first}
${"Str"?lower_case}
${"Str"?upper_case}
${"str"?trim}
3.字符串的两种拼接方式拼接:
$ { “你好$ {emp.name!}”}
$ {“hello”+ emp.name!}
4.可以通过如下语法来截取子串:
<#assign str =“abcdefghijklmn”/>
$ {str?substring(0,4)}
$ { str [ 0 ] } $ {str [4]}
$ {str [1..4]}
$ {str?index_of("n")}
5,日期输出
$ {emp.date?string('yyyy -MM-dd')}
6,数字输出(以数字20为例)
$ {emp.name?string.number}
$ {emp.name?string.currency}
$ {emp.name?string.percent}
$ {1.222?int}
<#setting number_format =“percent”/>
<#assign answer = 42 />
#{answer}
$ {answer?string}
$ {answer?string.number}
$ {answer?string.currency}
$ {answer?string.percent}
#{answer}
mX:小数部分最小X位
MX:小数部分最大X位
如下面的例子:
<#assign x = 2.582 /> <#assign y = 4 />
# {x; M2}
# {y; M2}
# {x; m2}
#{Y; m2}
# {x; m1M2}
# {x; m1M2}
7,申明变量
<#assign foo = false />
$ {foo?string(“yes”,“no”)}
申明变量的几种方式
<#assign name = value>
<#assign name1 = value1 name2 = value2 ... nameN = valueN>
<#assign same as above... in namespacehash>
<#assign name>
capture this
</#assign>
<#assign name in namespacehash>
capture this
</#assign>
8,比较运算算符
表达式中支持的比较运算符符如下几个:
=或==:判断两个值是否相等。
!=:判断两个值是否不等。
>或gt:判断左边值是否大于右边值>
<=或lte:判断左边值是否小于等于右边值
9,算术运算符
FreeMarker表达式中完全支持算术运算,
FreeMarker支持的算术运算符包括:+, - ,*,/,%
注意:
(1)运算符两边必须是数字
(2)使用+运算符时,如果一边是数字,一边是字符串,就会自动将数字转换为字符串再连接,
如:$ {3 +“5”},结果是:35
10,逻辑运算符
逻辑运算符有如下几个:
逻辑与:&&
逻辑或:||
逻辑非:!
逻辑运算符只能作用于布尔值,否则将产生错误
11,FreeMarker中的运算符优先级如下(由高到低排列):
①,一元运算符:!
②,内建函数:
③,乘除法:*,/,%
④,加减法: - ,+
⑤,比较:>,<,> =,<=(lt,lte,gt,gte)
⑥,相等:==,=, !=
⑦,逻辑与:&&
⑧,逻辑或:||
⑨,数字范围:.. 实际上,我们在开发过程中应该使用括号来严格区分,这样的可读性好,出错少
12,if逻辑判断(注意:elseif不加空格)
<#if condition>
...
<#elseif condition2>
...
<#elseif condition3>
...
<#else>
...
</#if>
if 空值判断
<#if photoList??>...</#if>
值得注意的是,${..}只能用于文本部分,不能用于表达式,下面的代码是错误的:
<#if ${isBig}>Wow!</#if>
<#if "${isBig}">Wow!</#if>
<#if isBig>Wow!</#if>
10、switch (条件可为数字,可为字符串)
<#switch value>
<#case refValue1>
....
<#break>
<#case refValue2>
....
<#break>
<#case refValueN>
....
<#break>
<#default>
....
</#switch>
13、集合 & 循环
<#list empList! as emp>
${emp.name!}
</#list>
<#list 0..(empList!?size-1) as i>
${empList[i].name!}
</#list>
empList?size
emp_index:
emp_has_next:
<#if emp_index = 0><#break></#if>
<#if empList?size != 0></#if>
<#assign l=0..100/>
<#list 0..100 as i>
${i}
</#list>
empList[3..5]
<#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as x>
<#list ["星期一","星期二","星期三"] + ["星期四","星期五","星期六","星期天"] as x>
[2 + 2, [1, 2, 3, 4], "whatnot"]
<#assign x = ["red", 16, "blue", "cyan"]>
${x?seq_contains("blue")?string("yes", "no")}
${x?seq_contains("yellow")?string("yes", "no")}
${x?seq_contains(16)?string("yes", "no")}
${x?seq_contains("16")?string("yes", "no")}
<#assign x = ["red", 16, "blue", "cyan", "blue"]>
${x?seq_index_of("blue")}
<#list movies?sort_by("showtime") as movie></#list>
<#list movies?sort_by("showtime")?reverse as movie></#list>
<#list movies as moive>
<a href="${moive.url}">${moive.name}</a>
</#list>
<#list movies?sort as movie>
<a href="${movie.url}">${movie.name}</a>
</#list>
<#list moives?sort_by(["name"]) as movie>
<a href="${movie.url}">${movie.name}</a>
</#list>
<#list movies?sort_by(["name"])?reverse as movie>
<a href="${movie.url}">${movie.name}</a>
</#list>
14、Map对象
<#assign scores = {"语文":86,"数学":78}>
<#assign scores = {"语文":86,"数学":78} + {"数学":87,"Java":93}>
emp.name
emp["name"]
循环
15、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码对应的字符.
如果某段文本中包含大量的特殊符号,FreeMarker提供了另一种特殊格式:可以在指定字符串内容的引号前增加r标记,在r标记后的文件将会直接输出.看如下代码:
${r"${foo}"}
${r"C:/foo/bar"}
16、include指令
<#include "/test.ftl" encoding="UTF-8" parse=true>
encoding="GBK"
parse=true
注意:在ftl文件里布尔值都是直接赋值的如parse=true,而不是parse="true"
17、import指令
<#import "/libs/mylib.ftl" as my>
18、compress 压缩
<#compress>
...
</#compress>
<#t>
<#lt>
<#rt>
<#nt>
19、escape,noescape 对字符串进行HTML编码
只会影响到body内出现的插值,使用escape指令的语法格式如下:
<#escape x as x?html>
First name: ${firstName}
<#noescape>Last name: ${lastName}</#noescape>
Maiden name: ${maidenName}
</#escape>
First name: ${firstName?html}
Last name: ${lastName}
Maiden name: ${maidenName?html}