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

案例-指令参考

表达式

                  

一、 Assign

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

二、attempt, recover

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

三、compress

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

四、flush

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

五、function, return

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

六、global全局变量

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

七、if, else, elseif

  1. 示例1:只有 if 没有 elseif else
  2. <#if x == >
  3. x is 1
  4. </#if>
  5. 示例2:只有 if 没有 elseif 但是有 else
  6. <#if x == >
  7. x is 1
  8. <#else>
  9. x is not 1
  10. </#if>
  11. 示例3:有 if 和两个 elseif 但是没有 else
  12. <#if x == >
  13. x is 1
  14. <#elseif x == >
  15. x is 2
  16. <#elseif x == >
  17. x is 3
  18. </#if>
  19. 示例4:有 if 和三个 elseif 还有 else
  20. <#if x == >
  21. x is 1
  22. <#elseif x == >
  23. x is 2
  24. <#elseif x == >
  25. x is 3
  26. <#elseif x == >
  27. x is 4
  28. <#else>
  29. x is not 1 nor 2 nor 3 nor 4
  30. </#if>
  31. 示例5:嵌套 if 指令
  32. <#if x == >
  33. x is 1
  34. <#if y == >
  35. and y is 1 too
  36. <#else>
  37. but y is not
  38. </#if>
  39. <#else>
  40. x is not 1
  41. <#if y < 0>
  42. and y is less than 0
  43. </#if>
  44. </#if>

八、import

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

九、include

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

十、local

  1. <#local name=value>

  2. <#local name1=value1 name2=value2 ... nameN=valueN>

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

十一、macro, nested, return

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

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

return

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

十二、noparse(不解析ftl)

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

十三、stop

  1. <#stop>

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

十四、switch, case, default, break

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

十五、t, lt, rt

  1. <#t>
  2. <#lt>
  3. <#rt>
  4. 说明:指示FreeMarker去忽略标记中行的特定的空白的移除发生在解析阶段
  5. t (整体削减):忽略本行中首和尾的所有空白。
  6. lt (左侧削减):忽略本行中首部所有的空白。
  7. rt (右侧削减):忽略本行中尾部所有的空白。

五、案例-指令参考-freemarker指令、表达式的更多相关文章

  1. 汇编语言--微机CPU的指令系统(五)(数据传送指令)

    五.微机CPU的指令系统 1.汇编语言指令格式 汇编语言的指令格式如下: 指令助忆符 [操作数1 [, 操作数2 [, 操作数3]]] [;注释] 指令助忆符体现该指令的功能,它对应一条二进制编码的机 ...

  2. Vue基础系列(五)——Vue中的指令(中)

    写在前面的话: 文章是个人学习过程中的总结,为方便以后回头在学习. 文章中会参考官方文档和其他的一些文章,示例均为亲自编写和实践,若有写的不对的地方欢迎大家和我一起交流. VUE基础系列目录 < ...

  3. [汇编学习笔记][第五章[BX]和loop指令]

    第五章[BX]和loop指令 前言 定义描述性符号“()”来表示一个寄存器或一个内存单元的内容,比如: (ax)表示ax中的内容,(al)表示al的内容. 约定符号ideta表示常量. 5.1 [BX ...

  4. 汇编语言--微机CPU的指令系统(五)(字符串操作指令)

    (11)字符串操作指令 字符串操作指令的实质是对一片连续存储单元进行处理,这片存储单元是由隐含指针DS:SI或ES:DI来指定的.字符串操作指令可对内存单元按字节.字或双字进行处理,并能根据操作对象的 ...

  5. Javaweb学习笔记——(十二)——————JSP指令:page指令、include指令、taglib指令,JavaBean,内省,EL表达式

    JSP指令JSP指令分类 JSP有三大指令: *page指令 *include指令 *taglib指令 在JSP中没有任何指令是必须的. 但基本上每个JSP都是使用page指令============ ...

  6. 重学计算机组成原理(五)- "旋转跳跃"的指令实现

    CPU执行的也不只是一条指令,一般一个程序包含很多条指令 因为有if-else.for这样的条件和循环存在,这些指令也不会一路平直执行下去. 一个计算机程序是怎么被分解成一条条指令来执行的呢 1 CP ...

  7. [Vue入门及介绍,基础使用、MVVM架构、插值表达式、文本指令、事件指令]

    [Vue入门及介绍,基础使用.MVVM架构.插值表达式.文本指令.事件指令] 1)定义:javascript渐进式框架 ​ 渐进式:可以控制一个页面的一个标签,也可以控制一系列标签,也可以控制整个页面 ...

  8. 王爽汇编第五章,[bx]和loop指令

    目录 王爽汇编第五章,[bx]和loop指令 [bx]和loop指令 例子: 王爽汇编第五章,[bx]和loop指令 [bx]和loop指令 [bx]之前我们介绍寄存器的时候,已经很详细的说明过了,b ...

  9. iptables指令参考

    1.首先介绍一下指令和相关配置文件 启动指令:service iptables start 重启指令:service iptables restart 关闭指令:service iptables st ...

随机推荐

  1. 误删ext3的恢复方法

    1.Ext3文件系统结构的简单介绍在Linux所 用的Ext3文件系统中,文件是以块为单位存储的,默认情况下每个块的大小是1K,不同的块以块号区分.每个文件还有一个节点,节点中包含有文件所有者, 读写 ...

  2. POJ C程序设计进阶 编程题#3 : 排队游戏

    编程题#3:排队游戏 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 在幼儿 ...

  3. 一个用WPF做的简单计算器源代码

    一.界面设计XAML代码 <Window x:Class="fengjisuanqi.MainWindow" xmlns="http://schemas.micro ...

  4. javascript的变量,传值和传址,参数之间关系

    先把收获晾一下: 1.javascrip变量包含两种类型的值,一种为引用类型的值,一种是基本类型的值.引用类型包括:Array,Object,Function(可以这么理解,非基本类型的都是引用类型) ...

  5. tp框架集成支付宝,中转页变成gbk编码

    tp框架中集成支付宝的功能,将支付宝的demo例子存在到下图位置\Extend\Vendor\Alipay 生成支付订单 /** * 支付订单 */ public function pay() { h ...

  6. 【转】Spark 体系结构

    原文地址:http://jerryshao.me/architecture/2013/03/29/spark-overview/ 援引@JerryLead的系统架构图作为Spark整体结构的一个 bi ...

  7. 使用WIF实现单点登录Part I——Windows Identity Foundation介绍及环境搭建

    首先先说一下什么是WIF(Windows Identity Foundation).由于各种历史原因,身份验证和标识的管理一般都比较无规律可循.在软件里加入“身份验证”功能意味着要在你的代码里混进处理 ...

  8. Oracle 分区表的统计信息实例

    ORACLE的统计信息在执行SQL的过程中扮演着非常重要的作用,而且ORACLE在表的各个层次都会有不同的统计信息,通过这些统计信息来描述表的,列的各种各样的统计信息.下面通过一个复合分区表来说明一些 ...

  9. STM32F4_USART配置及细节描述

    Ⅰ.概述 关于USART串口通信,可以说是MCU的标配.不管是在实际项目应用中,还是在开发过程中,它都起着很重要的作用. 在项目应用中我们常常使用UART串口进行通信,根据通信的距离及稳定性,还选择添 ...

  10. 算法:C++排列组合

    题目:给定1-n数字,排列组合. 解法:递归.第一个数字有n种选择,第二个数字有n-1种选择,依次递归排列输出.用数组表示n个数字,用过的数字置0. 实现语言:C++ #include <ios ...