FreeMarker 的常用指令介绍

一、数据类型:

四种基本类型:String、Number、Boolean、Date。直接指定值可以是字符串、数值、布尔值、集合及Map对象

1. 字符串
直接指定字符串值使用单引号或双引号限定。字符串中可以使用转义字符”\"。如果字符串内有大量的特殊字符,则可以在引号的前面加上一个字母r,则字符串内的所有字符都将直接输出。
2. 数值
数值可以直接输入,不需要引号。FreeMarker不支持科学计数法。
3. 布尔值
直接使用true或false,不使用引号。
4. 集合
集合用中括号包括,集合元素之间用逗号分隔。
使用数字范围也可以表示一个数字集合,如1..5等同于集合[1, 2, 3, 4, 5];同样也可以用5..1来表示[5, 4, 3, 2, 1]。
5. Map对象
Map对象使用花括号包括,Map中的key-value对之间用冒号分隔,多组key-value对之间用逗号分隔。
注意:Map对象的key和value都是表达式,但key必须是字符串。{"name":"green mouse", "price":150}

6. 时间对象

root.put("date1", new Date());

${date1?string("yyyy-MM-dd HH:mm:ss")}

二、控制语句

if指令

这是一个典型的分支控制指令,该指令的作用完全类似于Java语言中的if,if指令的语法格式如下: 
<#if condition>... 
    <#elseif condition>... 
    <#elseif condition>... 
  <#else> ... 
</#if>

例子如下: 
<#assign age=23> 
<#if (age>60)>老年人 
        <#elseif (age>40)>中年人 
        <#elseif (age>20)>青年人 
    <#else> 少年人 
</#if> 
输出结果是:青年人 
上面的代码中的逻辑表达式用括号括起来主要是因为里面有“>”符号,由于FreeMarker会将>符号当成标签的结束字符,可能导致程序出错,为了避免这种情况,我们应该在凡是出现这些符号的地方都使用括号。

自定义指令(macro指令)

<#macro m1>   <#--定义指令m1 -->

<b>aaabbbccc</b>

<b>dddeeefff</b>

</#macro>

<@m1 /><@m1 />  <#--调用上面的宏指令 -->

输出:aaabbbccc

dddeeefff

定义带参的宏指令:

<#macro m2 a b c >

${a}--${b}--${c}

</#macro>

<@m2 a="老高" b="老张" c="老马" />

nested指令:

<#macro border>

<table border=4 cellspacing=0 cellpadding=4><tr><td>

<#nested>

</td></tr></table>

</#macro>

<@border >表格中的内容!</@border>

include指令:

<#include "included.txt" />

三、集合操作

list, break

语法 
<#list  sequence  as item > 
... 
<#if item = "spring"><#break></#if> 
... 
</#list>

关键字 
item_index: 是list当前值的下标 
item_has_next: 判断list是否还有值

用例 
<#assign seq = ["winter", "spring", "summer", "autumn"]> 
<#list seq as x> 
  ${x_index + 1}. ${x}<#if x_has_next>,</#if>

</#list>

输出 
  1. winter, 
  2. spring, 
  3. summer, 
  4. autumn

四、空值处理

FreeMarker的变量必须赋值,否则就会抛出异常。

而对于FreeMarker来说,null值和不存在的变量是完全一样的,因为FreeMarker无法理解null值。

FreeMarker提供两个运算符来避免空值:

1. !: 指定缺失变量的默认值;

2. ??:判断变量是否存在。

!运算符有两种用法:variable!或variable!defaultValue。第一种用法不给变量指定默认值,表明默认值是空字符串、长度为0的集合、或长度为0的Map对象。

使用variable!defaultValue运算符指定默认值并不要求默认值的类型和变量类型相同。

测试空值处理:

<#-- ${sss} 没有定义这个变量,会报异常! -->

${sss!} <#--没有定义这个变量,默认值是空字符串! -->

${sss!"abc"} <#--没有定义这个变量,默认值是字符串abc! -->

五、命名空间_宏指令

当运行 FTL 模板时,就会有使用 assign 和 macro 指令创建的变量的集合(可能是空的),可以从前一章节来看如何使用它们。像这样的变量集合被称为 namespace 命名空间。在简单的情况下可以只使用一个命名空间,称之为 main namespace 主命名空间。因为通常只使用本页上的命名空间,所以就没有意识到这点。

如果想创建可以重复使用的宏,函数和其他变量的集合,通常用术语来说就是引用

library 库。使用多个命名空间是必然的。只要考虑你在一些项目中,或者想和他人共享使用的时候,你是否有一个很大的宏的集合。但要确保库中没有宏(或其他变量)名和数据模型中变量同名,而且也不能和模板中引用其他库中的变量同名。通常来说,变量因为名称冲突也会相互冲突。所以要为每个库中的变量使用不同的命名空间。

定义b.ftl文件:

<#macro copyright date>

<p>Copyright (C) ${date} 中国人民.</p>

</#macro>

<#assign mail = "[email protected]">

在a.ftl文件中引入b.ftl,从而可以使用b.ftl中定义的宏和变量:

测试命名空间:

<#import "b.ftl" as bb  />

<@bb.copyright date="2010-2011" />

${bb.mail}

<#assign mail="[email protected]"  />

${mail}

<#assign mail="[email protected]" in bb  />

${bb.mail}

执行后,控制台打印:

测试命名空间:

<p>Copyright (C) 2010-2011 中国人民.</p>

[email protected]

[email protected]

[email protected]

六、字符串操作

1. 字符串连接
字符串连接有两种语法:
(1) 使用${..}或#{..}在字符串常量内插入表达式的值;
(2)  直接使用连接运算符“+”连接字符串。
如,下面两种写法等效:
              ${"Hello, ${user}"}                                                                                                               
              ${"Hello, " + user + "!"}                                                                                                        
有一点需要注意: ${..}只能用于文本部分作为插值输出,而不能用于比较等其他用途,如:
              <#if ${isBig}>Wow!</#if>                                                                                                               
              <#if "${isBig}">Wow!</#if>                                                                                                             
应该写成:
              <#if isBig>Wow!</#if>

2. 截取子串
截取子串可以根据字符串的索引来进行,如果指定一个索引值,则取得字符串该索引处的字符;如果指定两个索引值,则截取两个索引中间的字符串子串。如:
              <#assign number="01234">
              ${number[0]} <#-- 输出字符0 -->
              ${number[0..3]} <#-- 输出子串“0123” -->

七、内置函数

FreeMarker提供了一些内建函数来转换输出,可以在任何变量后紧跟?。?后紧跟内建函数,就可以通过内建函数来转换输出变量。

字符串相关常用的内建函数:

1. html: 对字符串进行HTML编码;

2. cap_first: 使字符串第一个字母大写;

3. lower_case: 将字符串转成小写;

4. upper_case: 将字符串转成大写;

集合相关常用的内建函数:

1. size: 获得集合中元素的个数;

数字值相关常用的内建函数:

1. int: 取得数字的整数部分。

举例:

root.put("htm2", "<b>粗体</b>");

内建函数:

${htm2?html}

输出:<b>粗体</b>

时间: 2025-01-02 10:47:31

FreeMarker 的常用指令介绍的相关文章

FreeMarker FTL常用指令(3)

1.FreeMarker的3种FTL标签 ①开始标签:<#directivename parameter>②结束标签:</#directivename>③空标签:<#directivename parameter/> 在FreeMarker中,使用FTL标签来使用指令,这和HTML标签是完全类似的.使用标签时前面的符号#也可能变成@,如果该指令是一个用户指令而不是系统内建指令时,应将#符号改成@符号. 2.FreeMarker的常用指令  FreeMarker的常用指令

Vue入门---安装及常用指令介绍

1.安装 BootCDN----官网https://www.bootcdn.cn/ <script src="https://cdn.bootcss.com/vue/2.6.10/vue.js"></script> //或者 <script src="https://unpkg.com/vue/dist/vue.js"></script> npm npm i vue --save-dev bower bower i v

FreeMarker常用标签介绍

FreeMarker标签使用 一.FreeMarker模板文件主要有4个部分组成 1.文本,直接输出的部分 2.注释,即<#--...-->格式不会输出 3.插值(Interpolation):即${..}或者#{..}格式的部分,将使用数据模型中的部分替代输出 4.FTL指令:FreeMarker指令,和HTML标记类似,名字前加#予以区分,不会输出. FTL指令规则 FreeMarker有三种FTL标签,这和HTML的标签是完全类似的 开始标签:<#directivename par

AngularJs的常用的指令介绍

Angular Js的常用指令介绍 1.内置指令(前缀为“ng”): a. Ng-app: 标记和指定了AngularJs脚本作用域: b. Ng-model: 设置表单的具体的控件与当前作用域的属性的值的绑定: 如:<input type="text" ng-model="userName" /><br /> <span>Hello {{userName}}!</span> c. Ng-init: 初始化指定内部作用

freemarker指令介绍

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

[转] Freemarker的常用技巧总结

1,截取字符串 有的时候我们在页面中不需要显示那么长的字符串,比如新闻标题,这样用下面的例子就可以自定义显示的长度 < lt. <= lte. > gt. >= gte <#if jstbqkVO.gzdd?length lt 8>           <a href>${jstbqkVO.gzdd?default("")}</a>      <#else>           <a href title=&

Freemarker的常用技巧总结

Freemarker的常用技巧总结 1,截取字符串 有的时候我们在页面中不需要显示那么长的字符串,比如新闻标题,这样用下面的例子就可以自定义显示的长度 < lt. <= lte. > gt. >= gte <#if jstbqkVO.gzdd?length lt 8>            <a href>${jstbqkVO.gzdd?default("")}</a>       <#else>         

vue.js介绍,常用指令,事件,以及制作简易留言版

一.vue是什么? 一个mvvm框架(库).和angular类似,比较容易上手.小巧,让我们的代码更加专注于业务逻辑,而不是去关注DOM操作 二.vue和angular之间的区别 vue--简单易学 指令以v-xx 一片html代码配合上json,再new出来vue实例 个人维护项目 适合:移动端项目,小巧 angular--上手难 指令以ng-xxx 所有属性和方法都挂在$scope身上 angular由google维护 适合:pc端项目 共同点:不兼容低版本的IE 三.vue的基本使用 1.

走进AngularJs(二) ng模板中常用指令的使用方式

通过使用模板,我们可以把model和controller中的数据组装起来呈现给浏览器,还可以通过数据绑定,实时更新视图,让我们的页面变成动态的.ng的模板真是让我爱不释手.学习ng道路还很漫长,从模板开始入手是个不错方式,因为这部分内容相对简单好理解,而且是视图层的东西,大家都喜欢可以立马看得见的东西嘛.本篇我将搜罗模板中的常用指令一一测试,了解其使用方法,有点像背单词的感觉,会比较枯燥.不过对于初学,这样的枯燥是必须要经历的,开始~ 一.模板中可使用的东西及表达式 模板中可以使用的东西包括以下