刚刚入职几个月,在上海做了一个页面开发是.FTL的项目,简单的总结了一点最常用的FTL语法使用:
FTL语法使用:
注意:使用freemaker,要求所有标签必须闭合,否则会导致freemaker无法解析
1.判断对象是否存在,若成立说明存在 (注意elseif不加空格)
<#if quote.riskForce ??> </#if>
<#if quote.riskForce ??> <#else> </#if>
<#if quote.riskForce ??> <#elseif> <#else> </#if>
2.判断是否和某一个值相等(先判断是否存在,在判断相等,如果该指定的参数不存在还比较相等的话就会出错)
<#if componentId ?? && componentId==1></#if>
3.list循环(循环遍历list并给遍历的对象取别名attribute以方便后面对象调用),
if_exists在调用一个变量需要先判断是否为空不然为空时会出错,_index为取出行号索引从0开始,?size可以判断list大小
1.<#list quote.riskItems as item> ${item.kindCode?if_exists} ${item_index} </#list> {quote.riskItems ?size}
2. 例如车险项目中取报文返回的各项税率因子:
<#if returnDto.riskProfits??>
<#list returnDto.riskProfits as riskProfit>
<#if riskProfit.rate??>
<p>${riskProfit.profitName} : ${riskProfit.rate?string("#0.00")}%<p>
</#if>
</#list>
</#if>
4.变量与指定值相加减,需要先判断该变量是否为数字类型,?number 然后转换为数字类型再做相减运算(变量number与指定的2相减)
${blockWidth?number-2}
5.日期转换
时间格式化的方法代码
最好加上 判断下c是否存在
<#if quote.riskBusi.validateDate??>
${quote.riskBusi.validateDate?string("yyyy-MM-dd")} 2016-05-21
</#if>
如果是想要不一样的日期格式项目中是在freemarker.properties中定义日期的形式:datetime_format=yyyy年MM月dd日 HH时mm分
<#if quote.riskBusi.validateDate??>
${quote.riskBusi.validateDate?datetime("yyyy-MM-dd")} 2016年05月21日 00时00分
</#if>
6.申明变量
<#assign foo=false/> // 声明变量,插入布尔值进行显示,注意不要用引号
${foo?string("yes","no")} // 当为true时输出"yes",否则输出"no"
申明变量的几种方式
<#assign name=value>
<#assign name1=value1 name2=value2 ... nameN=valueN>
<#assign same as above... in namespacehash>
7.比较运算符
表达式中支持的比较运算符有如下几个:
= 或 == :判断两个值是否相等.
!= :判断两个值是否不等.
> 或 gt :判断左边值是否大于右边值
>= 或 gte :判断左边值是否大于等于右边值
< 或 lt :判断左边值是否小于右边值
<= 或 lte :判断左边值是否小于等于右边值
8.可以通过如下语法来截取子串:
<#assign str = "abcdefghijklmn"/>
// 方法1
${str?substring(0,4)} // 输出abcd
// 方法2
${str[0]}${str[4]} // 结果是ae
${str[1..4]} // 结果是bcde
// 返回指定字符的索引
${str?index_of("n")}
9.数字输出(以数字20为例)
${emp.name?string.number} // 输出20
${emp.name?string.currency} // ¥20.00
${emp.name?string.percent} // 20%
${1.222?int} // 将小数转为int,输出1
<#setting number_format="percent"/> // 设置数字默认输出方式('percent',百分比)
<#assign answer=42/> // 声明变量 answer 42
#{answer} // 输出 4,200%
${answer?string} // 输出 4,200%
${answer?string.number} // 输出 42
${answer?string.currency} // 输出 ¥42.00
${answer?string.percent} // 输出 4,200%
#{answer} // 输出 42
10.Ftl变量转换代码
1. ?number转为数字
2. ?c转为字符串
3. ?string转为字符串
4. ?currency(货币)
5. ?percent(百分比)
6. trim 删除字符串首尾空格 ${“ String ”?trim} 结果为String
7. split使用指定的分隔符将一个字符串拆分为一组字符串
<#list “This|is|split”?split(“|”) as s>
${s}
</#list>
${“strabg”?replace(“ab”,”in”)} 结果为string
${“string”?contains(“ing”)?string} 结果为true
注意:
布尔值必须转换为字符串才能输出 index_of(substring,start)在字符串中查找某个子串,返回找到子串的第一个字符的索引,如果没有找到子串,则返回-1。
${“string”?index_of(“in”) 结果为3
${“string”?index_of(“ab”) 结果为-1
length返回字符串的长度 ${“string”?length}结果为6
lower_case将字符串转为小写
${“STRING”?lower_case} 结果为string
upper_case将字符串转为大写
${“string”?upper_case} 结果为STRING
ends_with 判断某个字符串是否由某个子串结尾,返回布尔值。
${“string”?ends_with(“ing”)?string} 返回结果为true
注意:布尔值必须转换为字符串才能输出
html 用于将字符串中的<、>、&和“替换为对应得<>":&
Start参数用于指定从字符串的那个索引处开始搜索,start为数字值。
1.如果start大于字符串长度,则start取值等于字符串长度,如果start小于0, 则start取值为
${‘str’?substring(0)} 结果为str
${‘str’?substring(0,1)} 结果为s
2.cap_first 将字符串中的第一个单词的首字母变为大写。
${‘str’?cap_first} 结果为Str
3.uncap_first将字符串中的第一个单词的首字母变为小写。
${‘Str’?uncap_first} 结果为str
4.capitalize将字符串中的所有单词的首字母变为大写
${‘str’? capitalize} 结果为STR
date,time,datetime将字符串转换为日期
例如:
<#assign date1=”2009-10-12”?date(“yyyy-MM-dd”)>
<#assign date2=”9:28:20”?time(“HH:mm:ss”)>
<#assign date3=” 2009-10-12 9:28:20”?time(“HH:mm:ss”)>
${date1} 结果为2009-10-12
${date2} 结果为9:28:20
${date3} 结果为2009-10-12 9:28:20
11.include指令
// include指令的作用类似于JSP的包含指令:
<#include "/test.ftl" encoding="UTF-8" parse=true>
// 在上面的语法格式中,两个参数的解释如下:
encoding="GBK" // 编码格式
parse=true // 是否作为ftl语法解析,默认是true,false就是以文本方式引入,注意:在ftl文件里布尔值都是直接赋值的如parse=true,而不是parse="true"
暂时先总结这么多,欢迎指正补充!