五、案例-指令参考-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 onlyI 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 (右侧削减):忽略本行中尾部所有的空白。

 

转载于:https://www.cnblogs.com/xxt19970908/p/5594258.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/255063.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PartitionMotionSearch()函数

encode_one_macroblock()函数中的运动估计分为两大块&#xff0c;对于宏块级的三种模式&#xff0c;分块后直接对patition依次调用PartitionMotionSearch()函数&#xff1b;而对于亚宏块级的&#xff08;含8x8, 8x4,4x8,4x4&#xff09;模式&#xff0c;首先将宏块拆分为4个88子…

201521123017 《Java程序设计》第4周学习总结

1. 本周学习总结 2. 书面作业 Q1.注释的应用 使用类的注释与方法的注释为前面编写的类与方法进行注释&#xff0c;并在Eclipse中查看。(截图) Q2.面向对象设计(大作业1&#xff0c;非常重要) 2.1 将在网上商城购物或者在班级博客进行学习这一过程&#xff0c;描述成一个故事。…

本文以H264视频流为例,讲解解码流数据的步骤。

本文以H264视频流为例&#xff0c;讲解解码流数据的步骤。 为突出重点&#xff0c;本文只专注于讨论解码视频流数据&#xff0c;不涉及其它&#xff08;如开发环境的配置等&#xff09;。如果您需要这方面的信息&#xff0c;请和我联系。 准备变量 定义AVCodecContext。如…

2008-2021年商业银行数据(农商行、城商行、国有行、股份制银行)

2008-2021年商业银行数据&#xff08;农商行、城商行、国有行、股份制银行&#xff09; 1、时间&#xff1a;2008-2021年 2、范围&#xff1a;1700银行 3 、指标&#xff1a;证券简称、year、证券代码、资产总计、负债合计、所有者权益合计、利润总额、净利润、贷款总额、存…

异常--自定义异常类

为什么要调用父类构造器? http://blog.csdn.net/rockpk008/article/details/52951856 转载于:https://www.cnblogs.com/dwj-ngu/p/6576382.html

EtherCAT 网站链接

http://www.ethercat.org.cn/cn.htm EtherCAT技术介绍 EtherCAT系统组成和工作原理 EtherCAT采用主从式结构&#xff0c;主站PC机采用标准的100Base-TX以太网卡&#xff0c;从站采用专用芯片。系统控制周期由主站发起&#xff0c;主站发出下行电报&#xff0c;电报的最大有效数…

IEC 6-1131/3的5种标准编程语言

用于开发控制系统和商业管理系统的TRACE MODE6编程工具面向不同领域的软件工程师. TRACE MODE6包含的五种编程语言为&#xff1a;Techno SFC、Techno LD、Techno FBD、Techno ST和Techno IL. 这些语言是下列IEC 6-1131/3标准语言的扩展&#xff1a; SFC&#xff08;顺序功能图…

NoPause/NoEmgAbort的任务 与后台任务的区别

NoPause/NoEmgAbort的任务示例 下面的例子显示了一个程序&#xff0c;可以监视控制器的错误并根据错误编号在发生错误时切换I/O On/Off。 Function main Xqt ErrorMonitor, NoEmgAbort : FendFunction ErrorMonitor Wait ErrorOnIf 4000 < SysErr And Syserr < 5999 T…

30分钟搞定后台登录界面(103个后台PSD源文件、素材网站)(转)

出处&#xff1a;http://www.cnblogs.com/best/p/6582294.html 目录 一、界面预览二、PSD源文件预览三、工具分享四、资源说明五、素材下载网站六、下载去年八月时要做一个OA系统为了后台界面而烦恼&#xff0c;后来写了一篇博客&#xff08;《后台管理UI的选择》&#xff09;介…

FFMpeg中apiexample.c例子分析——解码分析

FFMpeg中apiexample.c例子分析——解码分析 收藏 我们直接从 video_decode_example() 函数开始讲&#xff0c;该函数实现了如何去解码一个视频文件&#xff0c;以 .mpeg 文 件为例。 &#xff08; 1 &#xff09;将缓存的末尾清 0 &#xff0c;从而确保读操作不会越界导致破…

FFMpeg中apiexample.c例子分析——编码分析

FFMpeg中apiexample.c例子分析——编码分析apiexample.c例子教我们如何去利用ffmpeg库中的api函数来自己编写编解码程序。 &#xff08;1&#xff09;首先&#xff0c;main函数中一开始会去调用avcodec_init()函数&#xff0c;该函数的作用是初始化libavcodec&#xff0c;而我们…

Access2010打开系统表MSysObjects的控制权限

一、显示系统表 第一步&#xff1a;单击左上角【文件】页签&#xff0c;点击【选项】打开选项对话框&#xff0c;如图所示 第二步&#xff1a;在【Access选项】对话框中&#xff0c;选择【当前数据库】&#xff0c;在【导航】栏下&#xff0c;点击【导航选项】打开【导航选项】…

与 OpenCV 1 同时使用

与 OpenCV 1 同时使用 目的 对于OpenCV的开发团队来说&#xff0c;持续稳定地提高代码库非常重要。我们一直在思考如何在使其易用的同时保持灵活性。新的C接口即为此而来。尽管如此&#xff0c;向下兼容仍然十分重要。我们并不想打断你基于早期OpenCV库的开发。因此&am…

机器学习(machine learning)之AdaBoost算法

转自&#xff1a;http://blog.csdn.net/haidao2009/article/details/7514787 浅谈 Adaboost 算法 机器学习是利用一些方法来使机器实现人的学习行为&#xff0c;以便获取新的知识或技能&#xff0c;重新组织已有的知识结构使之不断改善自身的性能。 AdaBoost全名“adaptive B…

使用CodeFirst创建并更新数据库

本文主要介绍如何使用CodeFirst模式来新建并更新数据库 在使用Entity Framwork的三种方式&#xff08;ModelFist、DBFirst、CodeFirst&#xff09;中&#xff0c;CodeFirst方式书写的代码最为干净。 至于CodeFist方式的详细优缺点请各位读者自行搜索&#xff0c;这里不多赘述。…

浅析人脸检测之Haar分类器方法

由于工作需要&#xff0c;我开始研究人脸检测部分的算法&#xff0c;这期间断断续续地学习Haar分类器的训练以及检测过程&#xff0c;在这里根据各种论文、网络资源的查阅和对代码的理解做一个简单的总结。我试图概括性的给出算法的起源、全貌以及细节的来龙去脉&#xff0c;但…

利用微软平台生成报表,线性图,柱形图

说来惭愧,以前的工作中一直借助第三方dll进行报表制作,比如线性图,柱形图. 因为现在工作的这家公司不允许随便引入第三方dll,听同事说起可以建rdl类型文件进行引入到winform窗体中,窗体上使用reportViewer控件进行关联展示.下面是我今天摸索3个小时的结果分享. 第一步. 首先找到…

opencv 模板匹配(cvMatchTemplate)

opencv 模板匹配(cvMatchTemplate) 模板匹配是通过在输入图像上滑动模板图像块对实际的图像块和输入图像进行匹配&#xff0c;并且可以利用函数cvMinMaxLoc()找到最佳匹配的位置。例如在工业应用中&#xff0c;可以锁定图像中零部件的位置&#xff0c;并根据具体的位置&…

[BZOJ1880] [Sdoi2009] Elaxia的路线 (SPFA 拓扑排序)

Description 最近&#xff0c;Elaxia和w**的关系特别好&#xff0c;他们很想整天在一起&#xff0c;但是大学的学习太紧张了&#xff0c;他们 必须合理地安排两个人在一起的时间。Elaxia和w**每天都要奔波于宿舍和实验室之间&#xff0c;他们 希望在节约时间的前提下&#xff0…

用OPENCV视觉解数独

用OPENCV视觉解数独 2010-06-29 看到增强视觉网站上介绍老外用视觉解SUDOKU(http://www.cvchina.info/2011/05/29/video-sudoku-solver/)&#xff0c;觉得应该不难&#xff0c;于是用OPENCV和训练好的数字分类器&#xff0c;也试着做一个&#xff0c;纯属娱乐 基本思路如下&…