freemarker之模板开发(数值和类型)
----------
1.数值(略)
2.类型
a.标量
标量是最基本,最简单的数值类型,它们可以是:
字符串
数字
布尔值
日期(受java平台限制的)
b.容器
这些值存在的目的是为了包含其他变量,它们仅仅作为容器。被包含的变量通常是子变量。容器类型有:
哈希表:每个子变量都可以通过一个唯一的名称来查找,这个名称是不受限制的字符串。哈希表并不确定其中子变量的顺序,变量 仅仅是通过名称来访问的。
序列:每个子变量通过一个整数来标识。第一个子变量的标识符是0,第二个是1,第三个是2,以此类推。这些数字通常被称为是 子变量的索引。
集:从模板设计者角度来看,集是有限制的序列。不能获取集的大小,也不能通过索引取出集中的子变量,但是它们仍然可以通过 list指令来遍历。
c.子程序
方法和函数: 一个值是方法或函数的时候那么它就可以计算其值,结果取决于传递给它的参数。
如:The average of 3 and 5 is : ${avg(3,5)}
那么方法和函数有什么区别呢?方法是来自于数据模型(它们反射了java对象的方法),而函数是定义在模板内的,但二者可以用同一 种方式来使用。
用户自定义指令: 用户自定义指令(换句话说,就是FreeMarker的标签)这种类型的值也是一种子程序,一种可以复用的模板代码 段。用户自定义指令示例:
<@box title="Attention!"> Too much copy-pasting may leads to maintenance headaches. </@box>
函数/方法和用户自定义指令的比较:按经验来说,如果能够实现,请先用自定义指令而不要用函数/方法。 指令的特征如下: . 输出(返回值)的是标记(HTML,XML等)。主要原因是函数的返回结果可以自动进行xml转义(这是因为${}的特性),而用户自定义指令的输出则不是(这是因为<@...>的特性所致,它的输出假定为是标记,因此 不再转义)。 . 副作用也是很重要的一点,它没有返回值。 . 会进行流程的控制(就像list或if指令那样),但是不能在函数/方法上这么做。