zoukankan      html  css  js  c++  java
  • 五、案例-指令参考-freemarker指令、表达式

    案例-指令参考描述:本人自己测试写了一遍,如有错的地方,懂freemarker的朋友望指点指点!

    案例-指令参考

     

    表达式

     

                      

    一、 Assign

    1、<#assign name1="北京" name2="上海" name3="广东">
    调用:${name1}、${name2}、${name3}
    2、<#assign name1> 消息模拟..   </#assign>
    调用:${name1}
    3、<#assign name5 in my命名空间> 消息模拟.. </#assign>
    调用:<#import "InstructionReference.ftl" as my命名空间>
    ${my.name5}

    二、attempt, recover

    <#attempt>
     =============>输出:${my.name5}
    <#recover>
      错误recover block
    </#attempt>
    attempt block:任意内容的模板块。这是会被执行的, 但是如果期间发生了错误,那么这块内容的输出将会回滚,之后 recover block 就会被执行。
    recover block: 任意内容的模板块。 这个仅在 attempt block 执行期间发生错误时被执行。你可以在这里打印错误信息或其他操。

    三、compress

    当你使用了对空白、换行的格式(比如HTML或XML) 时压缩指令对于移除多余的空白 
    <#assign x = "    moo 
    
       ">
    <#compress>
      1 2 3   4    5
      ${x}
      test only
      I said, test only
    </#compress>

    四、flush

    <#Flush>
    说明:当 FreeMarker 生成输出时,它通常不会立即发送到最终接收端 
    (比如web浏览器或最终的文件),而是会将内容累积在缓冲区,
    发送一个大块的内容。 缓冲区的精确规则不是由 FreeMarker 决定的
    ,而是由嵌入的软件决定的。 将缓冲区中累积的内容发送出去称为冲洗。

    五、function, return

    <#function name param1 param2 ... paramN>
      ...
      <#return returnValue>
      ...
    </#function>
    说明:
    name:方法变量的名称(不是表达式)
    param1, param2 等: 局部变量的名称, 存储参数的值(不是表达式),在 = 号后面和默认值 (是表达式)是可选的。
    paramN,最后一个参数, 可以可选的包含一个尾部省略(...), 这就意味着宏接受可变的参数数量。局部变量 paramN 将是额外参数的序列。
    returnValue: 计算方法调用值的表达式。
    return 指令可以在 <#function ...></#function> 之间被用在任意位置和任意次数。
    没有默认值的参数必须在有默认值参数 (paramName=defaultValue) 之前
    示例1:
    <#function avg x y>
      <#return (x + y) * 6>
    </#function>
    ${avg (10, 20)}
    示例2:
    <#function avg nums...>
      <#local sum = 0>
      <#list nums as num>
        <#local sum = sum + num>
      </#list>
      <#if nums? size = 5>
        <#return sum / nums? size>
      </#if>
    </#function>
    ${avg (10, 20, 30, 40, 40)}//参数可任意个

    六、global全局变量

    1、<#global name1="北京2">
    调用:${name1}
    
    2、<#global name1="北京" name2="上海" name3="广东">
    调用:${name1}、${name2}、${name3}
    
    3、<#global name4>消息模拟. </#global>
    调用:${name4}
    
    说明:一个相同名称的变量存在的话, 那么会隐藏由 global 指令创建的变量。

    七、if, else, elseif

    示例1:只有 if 没有 elseif 和 else
    <#if x == 1>
      x is 1
    </#if>
    示例2:只有 if 没有 elseif 但是有 else
    <#if x == 1>
      x is 1
    <#else>
      x is not 1
    </#if>
    示例3:有 if 和两个 elseif 但是没有 else
    <#if x == 1>
      x is 1
    <#elseif x == 2>
      x is 2
    <#elseif x == 3>
      x is 3
    </#if>
    示例4:有 if 和三个 elseif 还有 else
    <#if x == 1>
      x is 1
    <#elseif x == 2>
      x is 2
    <#elseif x == 3>
      x is 3
    <#elseif x == 4>
      x is 4
    <#else>
      x is not 1 nor 2 nor 3 nor 4
    </#if>
    示例5:嵌套 if 指令
    <#if x == 1>
      x is 1
      <#if y == 1>
        and y is 1 too
      <#else>
        but y is not
      </#if>
    <#else>
      x is not 1
      <#if y < 0>
        and y is less than 0
      </#if>
    </#if>

    八、import

    <#import path as hash>
    说明:使用参考assign,创建一个命名空间引入然后被调用。
    path模板的路径。 这是一个算作是字符串的表达式。(换句话说,它不是一个固定的字符串, 它可以是这样的一些东西,比如,profile.baseDir + "/menu.ftl"。)
    hash访问命名空间的哈希表变量不带引号的名字。不是表达式。 (要引入动态创建的名字)
    示例:<#import "/libs/mylib.ftl" as my>
    <@my.copyright date="1999-2002"/>

    九、include

    <#include path><#include path options>
    path包含文件的路径;一个算作是字符串的表达式。(用其他话说, 它不用是一个固定的字符串,它也可以是像"/menu.ftl"这样的东西。)
    options一个或多个这样的选项: encoding=encoding, parse=parse
    parse: 算作是布尔值的表达式(为了向下兼容,也接受一部分字符串值)
    encoding: 算作是字符串的表达式
    ignore_missing: 算作是布尔值的表达式
    parse:如果它为 true, 那么被包含的文件将会当作FTL来解析,否则整个文件将被视为简单文本 (也就是说不会在其中查找 FreeMarker 的结构)。如果你忽略了这个选项, 那么它默认是 true。
    encoding:被包含文件从包含它的文件继承的编码方式 (实际就是字符集),除非你用这个选项来指定编码方式。 合法的名字有:ISO-8859-2,UTF-8,Shift_JIS,Big5,EUC-KR,GB2312。 
    ignore_missing:当为 true,模板引用为空时压制错误,而 <#include ...> 不会输出任何东西。当为 false 时,如果模板不存在, 那么模板处理就会发生错误并停止。如果忽略这个选项,那么它的默认值是 false。
    说明:使用它在你的模板中插入另外一个 FreeMarker 模板文件 (由 path 参数指定)。 被包含模板的输出格式是在 include 标签出现的位置插入的。 被包含的文件和包含它的模板共享变量,就像是被复制粘贴进去的一样。
    示例:
    <#include "/common/copyright.ftl">
    <#include "/common/navbar.html" parse=false encoding="Shift_JIS">

    十、local

    <#local name=value><#local name1=value1 name2=value2 ... nameN=valueN><#local name>
      capture this
    </#local>
    
    说明:name在root中局部对象的名称。它不是一个表达式。但它可以被写作是字符串形式, 如果变量名包含保留字符,这是很有用的,比如 <#local "foo-bar" = 1>。 请注意,这个字符串没有扩展插值(如"${foo}")。
    =:赋值操作符,也可以简写的赋值操作符之一 (++,+= 等...),和 assign 指令 相似。value 存储的值,是表达式。
    
    示例:它和 assign 指令 类似,但是它创建或替换局部变量。 这仅仅在宏和方法的内部定义才会有作用。
    <#function Str1 nums>
    <#local sum = ".......">
        <#return sum + nums>
    </#function>
    调用:${Str1("测试")}            输出:.......测试

    十一、macro, nested, return

    <#macro name param1 param2 ... paramN>
      ...
      <#nested loopvar1, loopvar2, ..., loopvarN>
      ...
      <#return>
      ...
    </#macro>
    说明:
    •    name: 宏变量的名称,它不是表达式。和 顶层变量 的语法相同,比如 myMacro 或 my-macro。 然而,它可以被写成字符串的形式,如果宏名称中包含保留字符时,这是很有用的, 
        比如
    <#macro "foo~bar">...。 注意这个字符串没有扩展插值(如"${foo}")。 • param1, param2,等...: 局部变量 的名称,存储参数的值 (不是表达式),在 = 号后面和默认值(是表达式)是可选的。 默认值也可以是另外一个参数,
        比如
    <#macro section title label=title>。参数名称和 顶层变量 的语法相同,所以有相同的特性和限制。 • paramN, 最后一个参数,可能会有三个点(...), 这就意味着宏接受可变数量的参数,不匹配其它参数的参数可以作为最后一个参数 (也被称作笼统参数)。
        当宏被命名参数调用, paramN 将会是包含宏的所有未声明的键/值对的哈希表。当宏被位置参数调用,
    paramN将是额外参数的序列。 (在宏内部,要查找参数,可以使用 myCatchAllParam?is_sequence。) • loopvar1, loopvar2等...: 可选的,循环变量 的值, 是 nested 指令想为嵌套内容创建的。这些都是表达式。 return 和 nested 指令是可选的,而且可以在
    <#macro></#macro> 之间被用在任意位置和任意次数

    示例1:标准写法

    <#macro test1>

      Test text

    </#macro>

    调用:<@mtest1/>

     

    示例2:带参数的宏(参数可多个)

    <#macro test2 data>

      Test text:${data}

    </#macro>

    调用:<@test2 data="Hello"/>

    示例3带参数、默认参数(可多个)

    <#macro test3 data1 data2="2" data3="3">

      ===>${data1}

      ===>${data2}

      ===>${data3}

    </#macro>

    调用:<@test3 data1="Hello" data2="Hello"/> <@test3 data1="Hello" />

    示例4:集合迭代元素的宏

    <#macro list title items>

      <p>${title? cap_first}: </p>

      <ul>

        <#list items as x>

          <li>${x? cap_first} </li>

        </#list>

      </ul>

    </#macro>

    调用:<@list items=["mouse", "elephant", "python"] title="标题"/>

    Nested

    Nested

    说明:ested 指令执行自定义指令开始和结束标签中间的模板片段。 嵌套的片段可以包含模板中任意合法的内容
    
    示例1:标准简单
    <#macro do_twice>
      1. <#nested>
      2. <#nested>
    </#macro>
    调用:<@do_twice>something</@do_twice>
    输出: 
    示例2:嵌套内容创建循环变量
    <#macro do_thrice>
      <#nested 1>
      <#nested 2>
      <#nested 3>
    </#macro>
    调用:<@do_thrice; x>
      ${x} Anything.
    </@do_thrice>
    

    return

    说明:可以在任意位置留下一个宏或函数定义。
    <#macro test d>
    This test
      <#return>
      Will not be printed${d}
    </#macro>
    调用:<@test d="===>"/>

    十二、noparse(不解析ftl)

    <#noparse>
      ...
    </#noparse>
    说明:不会在这个指令体中间寻找FTL标签, 插值和其他特殊的字符序列,除了noparse的结束标记,避开对noparse内部ftl的解析。
    
    示例1:
    <#noparse>
      <#list animals as animal>
      <tr><td>${animal.name} <td>${animal. price} Euros
      </#list>
    </#noparse>

    十三、stop

    <#stop><#stop reason>
    
    说明:reason停止对模版解析,并且抛出一个异常,终止原因的信息化消息。是表达式,被算做是字符串,中止模板处理,给出(可选的)错误消息。 不要在普通情况下对结束模板处理使用! FreeMarker 模板的调用者会将它视为失败的模板呈现。

    十四、switch, case, default, break

    <#switch "2">
      <#case "1">
        ===>;1
       <#break>
      <#case "2">
       ===>; 2
      <#break>
      <#case "3">
       ===>; 3
      <#break>
    </#switch>
    说明:value, refValue1表达式将会计算成相同类型的标量,break 和 default 是可选的。

    十五、t, lt, rt

    <#t>
    <#lt>
    <#rt>
    说明:指示FreeMarker去忽略标记中行的特定的空白的移除发生在解析阶段
    t (整体削减):忽略本行中首和尾的所有空白。
    lt (左侧削减):忽略本行中首部所有的空白。
    rt (右侧削减):忽略本行中尾部所有的空白。
  • 相关阅读:
    Promise小结 ES6异步编程
    XLNet模型
    BERT模型
    Transformer模型
    注意力机制(Attention Mechanism)
    序列到序列模型(seq2seq)
    【Pandas-附件2】查询手册
    【Pandas-附件1】读取excle和csv具体函数
    【pandas-21】实践-同比和环比指标
    【pandas-20】实践(泰坦尼克沉船事件)-特征处理
  • 原文地址:https://www.cnblogs.com/xxt19970908/p/5594258.html
Copyright © 2011-2022 走看看