五、案例-指令参考-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 \n\n   ">
<#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 (右侧削减):忽略本行中尾部所有的空白。
时间: 2024-10-09 04:56:17

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

freemarker指令介绍

FreeMarker 的常用指令     1.if指令        分支控制语句        语法格式如下       <#if condition>            ....       <#elseif condition2>          ...       <#elseif condition3>                ...       <#else>          ...       </#if>      

王爽《汇编语言》第三版 第五章 [BX]和loop指令

5.1 [bx] mov ax,[bx]功能:bx 中存放的数据作为一个偏移地址EA ,段地址SA 默认在ds 中,将SA:EA处的数据送入ax中. 5.2 Loop指令 指令的格式是:loop 标号,CPU 执行loop指令的时候,要进行两步操作: 1.(cx)=(cx)-1: 2.判断cx中的值,不为零则转至标号处执行程序,如果为零则向下执行. 通常我们用loop指令来实现循环功能,cx 中存放循环次数. 5.3 在Debug中跟踪用loop指令实现的循环程序 5.4 Debug和汇编编译器

freemarker 指令

常见有 声明指令,条件指令,switch指令,循环指令,包含指令,不转义指令,压缩指令,也可以自定义指令 <#assign num=18> <#if num lt 11><#-- 条件指令 --> ${num} 小于 11 <#elseif num gt 14> ${num} 大于14 <#else> ${num} 在11和14 之间 </#if> <#-- switch 指令 --> <#switch num>

Angular 2 属性指令 vs 结构指令

Angular 2 的指令有以下三种: 组件(Component directive):用于构建UI组件,继承于 Directive 类 属性指令(Attribute directive):  用于改变组件的外观或行为 结构指令(Structural directive):  用于动态添加或删除DOM元素来改变DOM布局 组件 import { Component } from '@angular/core'; @Component({       selector: 'my-app', // 

Atitit..net&#160;clr&#160;il指令集&#160;以及指令分类&#160;&#160;与指令详细说明

Atitit..net clr il指令集 以及指令分类  与指令详细说明 1.1. .NET CLR 和 Java VM 都是堆叠式虚拟机器(Stack-Based VM), 1 1.2. 查看工具ILDASM1 1.3. 此程式执行时,关键的记忆体有三种,分別是:1 1.4. Il指令集2 1.4.1. Mov指令3 1.4.2.  跳转指令集合6 1.4.3.  算术 逻辑 与移位指令8 1.4.4. 类型转换9 1.4.5. Other  and oo指令10 2. 参考12 1.1. 

Atitit.java&#160;虚拟机的构成&#160;与指令分类&#160;与&#160;指令集合&#160;以及字节码查看工具javjap

Atitit.java 虚拟机的构成 与指令分类 与 指令集合 以及字节码查看工具javjap 1.1. 虚拟机的构成 java虚拟机--处理器.堆栈.寄存器.指令系统. 1 1.2. 虚拟机执行过程1 1.3. 约有250个指令2 2. JVM指令助记符 分类2 2.1. 变量到操作数栈:2 2.2. 算数指令3 2.3. 移位指令3 2.4. 逻辑指令4 2.5. 流程跳转指令4 2.6. Oo指令4 2.7. 运算指令 5 3. 查看指令反编译工具6 3.1.   分析java语言特性的一

Angular中的内置指令和自定义指令

NG中的指令,到底是什么(what)? 为什么会有(why)?以及怎样使用(how)? What: 在NG中,指令扩展HTML功能,为 DOM 元素调用方法.定义行为绑定数据等. Why: 最大程度减少DOM操作,实现数据绑定,与业务逻辑进行交互. How: 指令主要分为两种:内置指令和自定义指令,通过下面的例子,简单记录一下如何去使用. 内置指令 在官方API文档上罗列了很多指令,内置指令可以分为:普通指令 和 事件指令,他们都是作用于HTML之上的,通过添加属性的方式来实现的.简单看一下一些

ARM常用重要的寄存器及指令解释 和 指令英文全称

一.常用的寄存器 r0 -r3    临时变量  用于传递参数,传递返回指,当传递参数的参数大于4个时,用栈空间.即开辟sp fp:frame pointer  记录回溯sp ip: 很少用 ,临时存放sp sp:指向栈顶 lr:link register 用于跳转时记录返回地址 pc:记录cpu运行指令的地址     因为arm采用流水线方式   取值  译码  执行等   pc=pc+8,     即pc指向当前执行的指令的下两条. cpsr :状态寄存器,每种工作模式有自己的cpsr,记录

LEA指令与MOV指令区别

Tips: LEA指令与MOV指令的区别: ① MOV指令是 数据        传送指令-------传送数据 LEA指令是   有效地址 传送指令-------取偏移地址 ② MOV OPRD1 OPRD2 OPRD1: 目的操作数(寄存器,存储器,累加器) OPRD2: 源操作数(寄存器,存储器,累加器,立即数) 例如: 1 MOV DI,BX ;寄存器到寄存器之间传数 1 MOV AL,23H ;将立即数"复制"到寄存器 1 MOV [2000H],02H ;直接地址 注意: