freemaker注释:<#– 注释内容 –>格式部分,不会输出
———————————- 基础语法 ———————————-
1、字符输出
${ emp. name? if_exists}
${ emp. name! }
${ emp. name? default ( "xxx" ) }
${ emp. name! "xxx" }
2.常用内部函数:
${ "123<br>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}