Freemaker FTL指令常用标签及语法
注意:使用freemaker,要求所有标签必须闭合,否则会导致freemaker无法解析。
freemaker注释:<#– 注释内容 –>格式部分,不会输出
———————————- 基础语法 ———————————-
1、字符输出
1 | ${emp.name?if_exists} // 变量存在,输出该变量,否则不输出 |
常用内部函数:
1 | ${"123<br>456"?html} // 对字符串进行HTML编码,对html中特殊字符进行转义 |
字符串的两种拼接方式拼接:
1 | ${"hello${emp.name!}"} // 输出hello+变量名 |
可以通过如下语法来截取子串:
1 | <#assign str = "abcdefghijklmn"/> |
2、日期输出
1 | ${emp.date?string('yyyy-MM-dd')} //日期格式 |
3、数字输出(以数字20为例)
1 | ${emp.name?string.number} // 输出20 |
1 | 数字格式化插值可采用#{expr;format}形式来格式化数字,其中format可以是: |
1 | 如下面的例子: |
4、申明变量
1 | <#assign foo=false/> // 声明变量,插入布尔值进行显示,注意不要用引号 |
申明变量的几种方式
1 | <#assign name=value> |
5、比较运算符
表达式中支持的比较运算符有如下几个:
= 或 == :判断两个值是否相等.
!= :判断两个值是否不等.
> 或 gt :判断左边值是否大于右边值
>= 或 gte :判断左边值是否大于等于右边值
< 或 lt :判断左边值是否小于右边值
<= 或 lte :判断左边值是否小于等于右边值
6、算术运算符
FreeMarker表达式中完全支持算术运算,
FreeMarker支持的算术运算符包括:+, - , * , / , %
注意:
(1)、运算符两边必须是数字
(2)、使用+运算符时,如果一边是数字,一边是字符串,就会自动将数字转换为字符串再连接,如:${3 + “5”},结果是:35
7、逻辑运算符
逻辑运算符有如下几个:
逻辑与:&&
逻辑或:||
逻辑非:!
逻辑运算符只能作用于布尔值,否则将产生错误
8、FreeMarker中的运算符优先级如下(由高到低排列):
①、一元运算符:!
②、内建函数:?
③、乘除法:*, / , %
④、加减法:- , +
⑤、比较:> , < , >= , <= (lt , lte , gt , gte)
⑥、相等:== , = , !=
⑦、逻辑与:&&
⑧、逻辑或:||
⑨、数字范围:..
实际上,我们在开发过程中应该使用括号来严格区分,这样的可读性好,出错少
9、if 逻辑判断(注意:elseif 不加空格)
1 | <#if condition> |
if 空值判断
1 | // 当 photoList 不为空时 |
10、switch (条件可为数字,可为字符串)
1 | <#switch value> |
11、集合 & 循环
1 | // 遍历集合: |
12、Map对象
1 | // 创建map |
13、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}”} // 输出 ${foo}
${r”C:/foo/bar”} // 输出 C:/foo/bar
14、include指令
1 | // include指令的作用类似于JSP的包含指令: |
15、import指令
1 | // 类似于jsp里的import,它导入文件,然后就可以在当前文件里使用被导入文件里的宏组件 |
17、compress 压缩
1 | // 用来压缩空白空间和空白的行 |
1 | <#t> // 去掉左右空白和回车换行 |
18、escape,noescape 对字符串进行HTML编码
1 | // escape指令导致body区的插值都会被自动加上escape表达式,但不会影响字符串内的插值,只会影响到body内出现的插值,使用escape指令的语法格式如下: |
———————————- 高级语法 ———————————-
1、global全局赋值语法
1 | <#global name=value> |
2、setting 语法
1 | // 用来设置整个系统的一个环境 |
3、macro宏指令
例子1:
1 | <#-- 定义宏 --> |
例子2:
1 | <#-- 定义一个循环输出的宏 --> |
例子3:
1 | <#-- 嵌套宏 --> |
例子4:在nested指令中使用循环变量时,可以使用多个循环变量,看如下代码:
1 | <#-- 循环嵌套宏 --> |
4、结束macro指令
1 | // return指令用于结束macro指令 |