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 (右侧削减):忽略本行中尾部所有的空白。
  • 相关阅读:
    IO 单个文件的多线程拷贝
    day30 进程 同步 异步 阻塞 非阻塞 并发 并行 创建进程 守护进程 僵尸进程与孤儿进程 互斥锁
    day31 进程间通讯,线程
    d29天 上传电影练习 UDP使用 ScketServer模块
    d28 scoket套接字 struct模块
    d27网络编程
    d24 反射,元类
    d23 多态,oop中常用的内置函数 类中常用内置函数
    d22 封装 property装饰器 接口 抽象类 鸭子类型
    d21天 继承
  • 原文地址:https://www.cnblogs.com/xxt19970908/p/5594258.html
Copyright © 2011-2022 走看看