(1)序列的默认值为[],看下面的例子:
<#if (winnersList![])?size gt 0>
<table class="winner_table" border="0" cellspacing="0" cellpadding="0">
<tr>
<th class="bdr_gray">中奖账号</th>
<th>猜测差值</th>
</tr>
<#list winnersList as list>
<tr>
<td class="bdr_gray">${list.accountId!""}</td>
<td>${list.deviation!""}</td>
</tr>
</#list>
</table>
</#if>
说明:在上面例子中,winnersList默认为[],它的内建函数为size
(2)序列的连接:
可以将两个序列连接成一个新的序列,连接序列的运算符是'+',见下面的例子:
<#list ["一","二","三"] + ["四","五","六"] as x>
${x}
</#list>
输出结果如下:
一二三四五六
(3)序列的切分:
举个例子看序列的切分应用场景:有的时候我们在页面中不需要显示那么长的字符串,比如新闻标题,这样用下面的例子就可以自定义显示的长度
<#if title.content?length lt 8>
<a href>${title.content?default("")}</a>
<#else>
<a href title="${title.content}">${title.content[0..3]?default("")}</a>
</#if>
上面例子的作用是:如果这个字符串的长度小于8,那么就正常显示,反之则取4位。
序列的切分要注意下面两点:
从FreeMarker 2.3.3版本以后lastindex才能省略。
如果试图访问一个序列首变量之前的项或末变量之后的项将会引起错误,模板的执行也会中断。
(4)子序列的定义:
序列中的项是表达式,那么也可以这样做:[2 + 2, [1, 2, 3, 4], "what"],其中第一个子变量是数字4,第二个子变量是一个序列,第三个子变量是字符串"what"。
(5)数字序列的定义:
第一种定义序列的方式:
<#assign nums=[1,2,3,4,5,77,8,99]/>
使用list指令将序列输出,
<#list nums as num>
${num}
</#list>
第二种定义序列的方式
定义了一个连续的序列,
<#assign nums=12..99/>
这种方式定义的序列的内容是12到99
说明:
从上面的例子可以看出,序列也可以用start..end定义存储数字范围的序列,这里的start和end是处理数字值表达式,比如2..5和[2, 3, 4, 5]是相同的,但是使用前者会更有效率(内存占用少而且速度快)。可以看出前者也没有使用方括号,这样也可以用来定义递减的数字范围,比如5..2。(此 外,还可以省略end,只需5..即可,但这样序列默认包含5,6,7,8等递增量直到无穷大)。
(6)判断序列是否包含某个元素
如果要判断序列中是否包含某个指定的元素,可以使用序列的内建函数seq_contains。
注:seq_contains这个内建函数从FreeMarker 2.3.1 版本开始可用。而在2.3 版本中不存在。
<#--声明一个序列,包含若干个元素-->
<#assign x = ["red", 16, "blue", "cyan"]>
<#--使用seq_contains判断序列中的元素是否存在-->
"blue": ${x?seq_contains("blue")?string("yes", "no")}
"yellow": ${x?seq_contains("yellow")?string("yes", "no")}
16: ${x?seq_contains(16)?string("yes", "no")}
"16": ${x?seq_contains("16")?string("yes", "no")}
输出结果:
"blue": yes
"yellow": no
16: yes
"16": no
附:seq_前缀在这个内建函数中是需要的,用来和contains 区分开。contains函数用来在字符串中查找子串(因为变量可以同时当作字符串和序列)。
相关推荐
本文将深入探讨`servlet`的相关知识点,包括`serialVersionUID`的作用、`service()`方法的功能以及`doGet`和`doPost`的区别。 1. **serialVersionUID**: 在Java中,序列化是一个将对象转化为字节流的过程,便于...
以上内容是对全国计算机二级VB复习知识点的小结,涵盖了算法、数据结构、栈、队列、链表和树的基础知识,这些都是备考者需要重点掌握的内容。理解并能灵活运用这些知识点,将有助于提高考试成绩。
### Java基础知识小结 #### 1.1 `getPath()`、`getAbsolutePath()`、`getCanonicalPath()`的区别 在Java中,处理文件路径时经常会用到`getPath()`、`getAbsolutePath()`以及`getCanonicalPath()`这三个方法。它们...
这些知识点在GMAT数学部分是重点,考生需要熟练掌握并能灵活应用。同时,理解并运用这些技巧可以帮助在考试中快速准确地解决问题。在实际备考过程中,应多做练习题,提高对各种问题类型的敏感度和解决速度。
以下是对这些知识点的详细阐述: ### Oracle数据库基础知识 #### 1. Oracle SQL语句与序列(Sequence) - **序列(Sequence)**:在Oracle数据库中,序列是一种自动递增或递减的数字生成器,主要用于自动生成主键...
在一篇完整的计算机实习小结中,应该会包括实习生对这些知识点的理解和实际操作经验的介绍。 由于文档内容残缺不全,无法提供更加精确的信息。在实际操作中,为确保内容的准确性和完整性,应当使用高分辨率扫描仪,...
#### 小结 本文档主要介绍了Java中序列化的基本概念和实现方法。重点讲解了`Applet`和`Panel`类的序列化特性,以及如何通过实现`readObject`方法来定制序列化过程。此外,还讨论了一些与序列化相关的异常处理机制和...
### MATLAB使用小结 #### I. 清空环境变量及命令 在开始新的MATLAB会话或清除工作区中的变量时,通常会使用`clear all`来清除工作区中的所有变量,以及`clc`来清除命令窗口中的所有命令。这有助于避免因变量冲突...
线性表是数据结构中的基础概念,它是由n(n>=0)个数据元素组成的一个有限序列。在这样的序列中,每个元素都有一个直接前驱和一个直接后继,除了首元素没有前驱,尾元素没有后继。线性表的数据元素通常要求具有相同...
根据提供的文件信息,我们将深入探讨与“索引序列的创建”相关的几个核心知识点,包括用户管理、表结构设计、索引创建及管理、以及序列的使用。 ### 用户管理与权限分配 首先,通过SQL*Plus工具,我们创建了一个名...
MATLAB实训小结 在为期一周的MATLAB实训过程中,我对这款强大的数学计算软件有了深入的理解。MATLAB,全称Matrix Laboratory,以其矩阵运算为基础,提供了高效编程和强大的图形处理能力,尤其在仿真、验证以及算法...
本自学报告旨在总结这些关键知识点,并结合通信系统中的应用进行深入探讨。 1. 随机变量的特征函数是概率论中的重要工具,它能够描述随机变量的概率性质。特征函数具有以下特性: - 两两独立随机变量之和的特征...
【ASP.NET编程知识】Json.net 是一个非常流行的.NET框架下的JSON序列化和反序列化库,广泛用于ASP.NET应用程序中处理JSON数据。本文档总结了Json.net的一些常见使用方法。 首先,Json.net允许我们将.NET对象转换为...
5.6 课后小结: 理解序列化不仅包括其基本原理,还要关注其在实际应用中的安全性和版本兼容性问题,以及如何根据项目需求选择合适的序列化策略。 5.7 课后习题和5.8 上机实训: 设计练习题和上机操作,以加深对序列...
编译原理的心得及小结 编译原理是计算机科学中的一门重要课程,它涉及到程序设计语言的编译和解释。以下是对编译原理的一些心得和小...掌握编译原理需要牢固掌握词法分析、语法分析、语法制导翻译和代码优化等知识点。
5. 小结 在本文中,我们详细介绍了 Java 序列化和反序列化的概念和实现,并解释了它们在分布式应用中的重要性。我们还通过一个实例详解了序列化和反序列化的过程,希望能够帮助读者更好地理解 Java 序列化和反序列...
"《商用密码应用与安全性评估》第一章 密码基础知识-小结" 密码基础知识是密码应用与安全性评估的基础,包括密码技术、密码算法、密码协议、安全防护、分析破译、密钥管理等。密码技术是保障网络与信息安全最有效、...
总之,实验七小结的核心知识点是一维数组和二维数组的定义、操作及在函数中的使用,还包括字符数组和字符串处理,以及数组相关的算法基础。通过深入学习和实践,我们可以更好地理解和运用这些概念,解决实际问题。
《EXCEL小结》PPT课件包含了Excel电子表格处理软件的多个核心知识点,以下是详细的说明: 1. **Excel基础知识和基本操作**:在Excel中,首先要掌握如何启动和退出程序,了解Excel的工作界面,包括菜单栏、工具栏、...