ftl常⽤语法整理
判空及默认值
??:判断某个变量是否存在,返回boolean值
<#if object ??></#if>
<#if object ??><#else></#if>
!:指定缺失变量的默认值
判断两个值相等:先判断是否存在,再判断是否相等
<#if id ?? &&  id==1></#if>
list循环:遍历list并给对象取别名attribute供对象调⽤,if_exists在调⽤变量时需要先判断是否为空,否则会报错,_index为取出⾏号索引,从0开始,?size可以判断list⼤⼩。
<#list obj.list as attribute>
${attribute.id?if_exists}${attribute_index}
</#list>
{obj.list ?size} //计算list⼤⼩
<#list student as stu>${stu}</#list>
item_index:当前变量的索引值
item_has_next:是否存在下⼀个对象,item名称为as后的变量名,如stu
for循环精简版:
<#unt as x></#list>
List⽚段可以采⽤:products[10..15] or products[5..] 的格式进⾏定义,当只局限于数字:
<#assign c= [1,2,3,4,5,6]>
<#list c[2..5] as v>${v}</#list>
map
Map对象的key和value都是表达式,,但key必须是字符串,可以混合使⽤.和[""]访问。
class.student["name"]  //混合使⽤点语法和⽅括号语法
<#list Map?keys as s>${Map[s]}</#list>
<#assign c= {"a":"abc","b":"ddw"}>
${c.a}
变量与指定值加减:先判断该变量是否为数字类型,然后?number转换为数字类型,再做相减运算。
${obj?number-2}
⽇期转换
<#if obj??>${ateTime?string("yyyy-MM-dd HH:mm:ss")</#if>
<#assign date1=”2019-07-02”?date(“yyyy-MM-dd”)>  //结果为2019-07-02
<#assign date2=”12:10:20”?time(“HH:mm:ss”)>  //结果为12:10:20
<#assign date3=” 20019-07-02 12:10:20”?time(“HH:mm:ss”)>  //结果为20019-07-02 12:10:20
判断长度并截取
<#if obj.title?length lt 10>
定义全局变量
<#assign foo=ture />  //声明变量foo,插⼊布尔值
${foo?string("yes","no")}  //结果yes
<#assign name1=“aa” name2="bb" />  //可以同时定义多个变量
使⽤循环来给变量赋值:
<#assign x>
<#list ["red", "green", "blue", "black"] as n>${n}</#list>
</#assign>
${x}
变量转换
?number  //转为数字  ${age?string.number}  //20
#{c.a;m0}  //输出数字的格式化,保留⼩数的位数,数字格式化插值可采⽤#{expr;format}形式来格式化数字,其中format可以是:mX:⼩数部分最⼩X位 ,MX:⼩数部分最⼤X位。在定义字符串的时可以使''或"",对特殊字符需要使⽤\转义,如果存在⼤量特殊字符,可以使⽤${r"..."}进⾏过滤。${r"${foo}"}或${r"C:\foo\bar"}
?obj  //转为字符串
?string  //转为字符串
?currency  //货币格式  ${price?string.currency}  //$20.00
?percent  //百分⽐格式 ${per?string.percent}  //20%
trim  //删除字符串⾸尾空格 ${“  String ”?trim} 结果为String
split  //⽤指定分隔符将字符串拆分为⼀组字符串 <#list “This|is|split”?split(“|”) as s>${s}</#list>
${“heabo”?replace(“ab”,”ll”)}  //结果为hello
${“hello”?contains(“he”)?string}  //结果为true,布尔值必须转换为字符串才能输出
${“string”?index_of(“in”)  //结果为3
${“string”?index_of(“ab”)  //结果为-1
length  //返回字符串长度 ${“abc”?length} 结果为3
lower_case  //将字符串转为⼩写  ${“ABC”?lower_case} 结果为abc
upper_case  //将字符串转为⼤写  ${“abc”?upper_case} 结果为ABC
ends_with  //判断字符串是否由某个⼦串结尾,返回布尔值。
${“hello”?ends_with(“lo”)?string} 结果为true,布尔值必须转换为字符串才能输出
${name?if_exists}  //如果存在则输出这个值
${name?default(‘xxx’)}  //如果存在则输出默认值xxx
${name!"xxx"}  //如果不存在则输出默认值xxx
${date?string('yyyy-MM-dd')}  //输出⽇期格式
<#assign foo=ture />  //声明变量foo,插⼊布尔值
${foo?string("yes","no")}  //结果yes
<#compress>...</#compress>  //消除空⽩⾏。
<@compress single_line=true>  //将输出压缩为⼀⾏,需要包裹所需⽂档freemarker可⽤"["代替"<"在模板的⽂件开头加上[#ftl]。
<#noparse>...</#noparse>  //指定FreeMarker不处理该指定⾥包含的内容
内置函数
html  //将字符串中的<、>、&和“替换为<、>、"、&
?html  //⽤于将字符串中可能包含的html字符进⾏过滤
${name?html}  //使⽤html对字符进⾏格式化处理对于<;等的过滤,escape、noescape指令对body的内容使⽤统⼀的表达式。
<#escape x as x?html>
First name:${firstName}
Last name:${lastName}
</#escape>
上⾯的代码等同于:
First name:${firstName?html}
Last name:${lastName?html}
index_of(substring,start)  //在字符串中查某个⼦串,返回到⼦串的⾸字符索引,若没到则返回-1。  start参数指定从字符串的那个索引处开始,start为数字。如果start⼤于字符串长度,则start取
值为字符串长度,如果start⼩于0,则取0。
${‘str’?substring(0)}  //结果为str
${‘str’?substring(0,1)}  //结果为s
trim  //删除字符串⾸尾空格 ${“  String ”?trim} 结果为String
split  //⽤指定分隔符将字符串拆分为⼀组字符串 <#list “This|is|split”?split(“|”) as s>${s}</#list> cap_first  //将字符串中的第⼀个单词的⾸字母变为⼤写,${‘str’?cap_first}  //结果为Str
uncap_first  //将字符串中的第⼀个单词的⾸字母变为⼩写,${‘Str’?cap_first}  //结果为str capitalize  //将字符串中的所有单词的⾸字母变为⼤写,${‘str’?capitalize}  //结果为STR
length  //返回字符串长度 ${“abc”?length} 结果为3
lower_case  //将字符串转为⼩写  ${“ABC”?lower_case} 结果为abc
upper_case  //将字符串转为⼤写  ${“abc”?upper_case} 结果为ABC
ends_with  //判断字符串是否由某个⼦串结尾,返回布尔值。
${“hello”?ends_with(“lo”)?string} 结果为true,布尔值必须转换为字符串才能输出
{obj.list ?size}  //计算list⼤⼩
int  //取得数字的整数部分  ${-1.6?int} 结果是-1
Hash内置函数
hash?keys  //返回hash中所有key,结果为sequence
hash?values  //返回hash中所有value,结果为sequence
<#assign emp={“name”:“张三”, “age”:“25”}>
switch case判断字符串
<#assign keys=emp?keys>
<#list keys as k>${k} = ${emp[k]}</#list>
逻辑判断
if标签判断:
<#if condition>...
<#elseif condition2>...
<#elseif condition3>...
<#else>
Boolean空值判断:
<#if obj.name??>
switch标签判断:
<#switch value>
<#case refValue1>...
<#break>
<#case refValue2>...
<#break>
...
<#case refValueN>...
<#break>
<#default>...
</#switch>
assign标签⽣成集合:
<#assign l=0..100/>  //定义int区间的集合,如0-100
外部⽂件导⼊
<#import "/page/top.ftl" as top>
<#include "/footer.html">
<#include filename options>
options包含两个属性:encoding、parse。
encoding=”GBK” //编码格式
parse=true //是否作为ftl语法解析,默认是true,false是以⽂本⽅式引⼊。在ftl⽂件⾥布尔值都是直接赋值的,如parse=true,⽽不是parse=”true”。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。