当前位置 博文首页 > CHQIUU的专栏:学习FreeMarker常用语法,一篇就够了

    CHQIUU的专栏:学习FreeMarker常用语法,一篇就够了

    作者:[db:作者] 时间:2021-07-18 16:20

    if指令

    //第一种用法
    [#if 条件]
    ...
    [/#if]
    //第二种用法
     [#if 条件]
     ...
     [#else]
     ...
    [/#if]
     //第三种用法
      [#if 条件]
      ...
     [#elseif 条件]
     ...
     [#else]
     ...
    [/#if]
    

    list指令

    //第一种用法
    [#list animals as animal] 
      ...
    [/#list]
    
    //第二种用法
    [#list animals] 
     //如果集合为空则不进list
     ...
      [#items as animal] 
      //循环体
      ...
      [/#items] 
    [/#list]
    
    //第三种用法
    [#list animals as animal] 
        $ {animal}
         [#sep]//表示还有下一个实体时,执行显示,号[/#sep]
    [/#list]
    //第四种用法
    [#list animals  as animal]
      ${animal}
      [#sep],[/#sep]
      [#else]//如果list元素为空则执行else
       None
    [/#list]
    
    //第五种用法
    [#list animals  ]
      ...
      [#items as animal]
        ${animal}[#sep] ...[/#sep]
      [/#items]
    [#else]
    ...
    [/#list]
    
    

    include指令
    使用该include指令,您可以将另一个文件的内容插入到模板中。

     [#include "/copyright_footer.html"]
    
    

    使用内置插件
    FreeMarker使用?启动调用内置插件

      ${user?upper_case} //字符串大写
      ${user?cap_first} //首字母大写
      ${user?length} //字符串长度
      ${animal.protected?string("Y", "N")} //返回字符串“Y”或“N”,具体取决于布尔值animal.protected
      ${user?starts_with("J")} //第一个字母是否是J
      ${1.1?int} //取整
      //list 相关用法
      ${animals?size} //list大小
      ${fruits?join(", ")} //通过连接项目,并在每个项目之间插入参数分隔符(如“orange,banana”)将列表转换为字符串
      [#list animals as animal]
      	${animal?index}   //索引0开始
      	${animal?counter} //索引1开始
      	${animal?item_parity} //根据当前的计数器奇偶校验,给出字符串“奇数”或“偶数”。这通常用于着色具有交替颜色的行
      [/#list]
      // 内置插件是可以连接一起使用,例如:
    ${fruits?join(", ")?upper_case}
    //取整
    ${1.1?int} 
     
    
    

    “. .”操作符
    “…”用来表示一个范围,通常用于截取字符串和序列

    start…end 包含开始和结束。例:0…5 相当于[0,5]
    start…<end 和 start…!end 包含开始但不包含结束。例: 0…<5 相当于[0,)
    start…*length 长度限制范围。例: 1…*5 相当于 1 2 3 4 5
    start… 右无界范围。这就像长度有限的范围,长度无限。例如,1… 相当于 [1, 2, 3, 4, 5, 6, … ]无限

    “. .”操作符并不真正存储它们所包含的数字,因此例如0. .1并且 0. .100000000速度相同,占用的内存也相同。
    该操作符可用于字符串操作和序列操作。例如:

    
     //字符串操作
    //比如name=“freemarker”
    ${name[0..5]}   //freema   截取前6个字符
    ${name[0..<5]}  //freem    截取前5个字符
    ${name[0..*5]}  //freem     截取前5个字符
    ${name[5..]}    //arker       截取第6个字符及以后的字符
     //序列操作
    [#list animals[0..5] as animal]  ${animal.name} [/#list]     //只循环前序列的前6个对象
    [#list animals[0..<5] as animal]  ${animal.name} [/#list]    //只循环前序列的前5个对象
    [#list animals[0..*5] as animal]  ${animal.name} [/#list]    //只循环前序列的前5个对象
    [#list animals[5..] as animal]  ${animal.name} [/#list]      //只循环前序列的第6个及以后的对象
    [#list animals[10..5] as animal]  ${animal.name} [/#list]    //循环下标为10到5的倒序,这种方法可以让序 //列倒序
    [#list 0..10 as num]  ${num} [/#list]                        //0~10的循环
    

    r转义
    如果你想直接在页面上显示“${name}”字符串就得使用r进行转义。例如

    ${r"${name}"}  //直接输出${name}
    

    assign关键字
    assign用于自定义变量
    例如:

    
    //定义一个字符串变量
    [#assign name="freemarker"]                  //定义一个字符串
    [#assign name="Hello ${user} !"]             
    [#assign name="free" + “marker”]             //两个字符串拼接
    //定义一个序列
    <#assign seq1 = ["abc""bcd""cde"]>         //定义一个序列
    <#assign seq2 =  seq1 + ["efg"]>              //两个序列拼接
    <#assign seq3 =  ["a"["b","c"]"d"]>           //可以序列中可以包含任意类型
    //定义一个Hash
    <#assign ages = {"Joe"23"Fred"”:25}>
    <#assign ages = {"Joe"23"Fred"25} + {"Joe"30"Fred"18}>
    // 定义一个number变量
    <#assign num = 25>
    <#assign num = 25 + 10 * 12>    //可以进行各种算数运算
    
    cs