美文网首页
ftl常用语法整理

ftl常用语法整理

作者: 夏与清风 | 来源:发表于2019-07-15 19:40 被阅读0次

    \bullet 判空及默认值

    ??:判断某个变量是否存在,返回boolean值

    <#if object ??></#if>

    <#if object ??><#else></#if>

    !:指定缺失变量的默认值

    product.color!"red"

    \bullet 判断两个值相等:先判断是否存在,再判断是否相等

    <#if id ?? &&  id==1></#if>

    \bullet 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循环精简版:

    <#list 1..count 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>

    \bullet map

    Map对象的key和value都是表达式,,但key必须是字符串,可以混合使用.和[""]访问。

    class.student["name"]  //混合使用点语法和方括号语法

    <#list Map?keys as s>${Map[s]}</#list>

    <#assign c= {"a":"abc","b":"ddw"}>

    ${c.a}

    \bullet 变量与指定值加减:先判断该变量是否为数字类型,然后?number转换为数字类型,再做相减运算。

    ${obj?number-2}

    \bullet 日期转换

    <#if obj??>${obj.createTime?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

    \bullet 判断长度并截取

    <#if obj.title?length lt 10>

    \bullet 定义全局变量

    <#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}

    \bullet 变量转换

    ?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不处理该指定里包含的内容

    \bullet 内置函数

    html  //将字符串中的<、>、&和“替换为&lt;、&gt;、&quot;、&amp;

    ?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

    \bullet Hash内置函数

    hash?keys  //返回hash中所有key,结果为sequence

    hash?values  //返回hash中所有value,结果为sequence

    <#assign emp={“name”:“张三”, “age”:“25”}>

    <#assign keys=emp?keys>

    <#list keys as k>${k} = ${emp[k]}</#list>

    \bullet 逻辑判断

    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

    \bullet 外部文件导入

    <#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”。

    相关文章

      网友评论

          本文标题:ftl常用语法整理

          本文链接:https://www.haomeiwen.com/subject/kihnkctx.html