最常用的概念
1、 scalars:存储单值
字符串:简单文本由单或双引号括起来。 数字:直接使用数值。 日期:通常从数据模型获得
布尔值:true或false,通常在<#if …>标记中使用
2、 hashes:充当其它对象的容器,每个都关联一个唯一的查询名字 具有一个唯一的查询名字和他包含的每个变量相关联。
3、 sequences:充当其它对象的容器,按次序访问 使用数字和他包含的每个变量相关联。索引值从0开始。
4、 集合变量:
除了无法访问它的大小和不能使用索引来获得它的子变量:集合可以看作只能由<#list...>指令使用的受限sequences。
5、 方法:通过传递的参数进行计算,以新对象返回结果 方法变量通常是基于给出的参数计算值在数据模型中定义。
6、 用户自定义FTL指令:宏和变换器 7、 节点
节点变量表示为树型结构中的一个节点,通常在XML处理中使用。
在模板里对sequences和hashes初始化 sequences
1. [―you‖,‖me‖,‖he‖] 2. 1..100 3. [ {―Akey‖:‖Avalue‖},{―Akey1‖:‖Avalue1‖},
{―Bkey‖:‖Bvalue‖},{―Bkey1‖:‖Bvalue1‖}, ] hashes {―you‖:‖a‖,‖me‖:‖b‖,‖he‖:‖c‖} 注释标志 <#--
这里是注释 -->
旧版本的freemarker采用的是<#comment> 注释 #comment>方法
sequences内置方法 sequence?first
返回sequence的第一个值;前提条件sequence不能是null sequence?last
返回sequence最后一个值 sequence?reverse 反转sequence的值 sequence?size
返回sequence的大小 sequence?sort
对sequence按里面的对象toString()的结果进行排序 sequence?sort_by(value)
对sequence 按里面的对象的属性value进行排序
如: sequence里面放入的是10 个user对象,user对象里面包含name,age等属性 sequence?sort_by(name) 表示所有的user按user.name进行排序 hashes内置方法 hash?keys
返回hash里的所有keys, 返回结果类型sequence
hash?values
返回hash里的所有value, 返回结果类型sequence 模板
使用FTL(freeMarker模板语言)编写 组成部分 一、整体结构
1、注释:<#--注释内容-->,不会输出。 2、文本:直接输出。
3、interpolation:由 ${var} 或 #{var} 限定,由计算值代替输出。 4、FTL标记 二.表达式 1、直接指定值: 1-1、字符串:
由双引号或单引号括起来的字符串,其中的特殊字符(如' \等)需要转义。
1-2、raw字符串:
有一种特殊的字符串称为raw字符串,被认为是纯文本,其中的\\和{等不具有特殊含义,该类字符串在引号前面加r,下面是一个例子:
${r\屏幕输出结果为:/${data}\
转义 含义 序列
\\\双引号(u0022) \\' 单引号(u0027) \\\\ 反斜杠(u005C) \\n 换行(u000A) \\r Return (u000D) \\t Tab (u0009) \\b Backspace (u0008) \\f Form feed (u000C) \\l < \\g > \\a & \\{ {
\\xCode 4位16进制Unicode代码
1-3、数字:直接输入,不需要引号
1)、精度数字使用―.‖分隔,不能使用分组符号 2)、目前版本不支持科学计数法,所以―1E3‖是错误的 3)、不能省略小数点前面的0,所以―.5‖是错误的 4)、数字8、+8、08和8.00都是相同的 1-4、布尔值:true和false,不使用引号
1-5、序列:由逗号分隔的子变量列表,由[]方括号限定。 1)、子变量列表可以是表达式
2)、可以使用数字范围定义数字序列,不需要方括号限定,例如2..5等同于[2, 3, 4, 5],但是更有效率,可以定义反递增范围如:5..2。 1-6、散列(hash)
1)、由逗号分隔的键/值列表,由{}大括号限定,键和值之间用冒号分隔,如:{\string\
2)、键和值都是表达式,但是键必须是字符串。
2、获取变量:
2-1、顶层变量:${变量名}
变量名只能是字母、数字、下划线、$、#、@ 的组合,且不能以数字开头。 2-2、散列:有两种方法
1)、点语法:变量名字和顶层变量的名字受同样的限制 2)、方括号语法:变量名字无限制,可以是任意的表达式的结果 book.author.name book.author.[\book[\book[\以上是等价的。
2-3、序列:使用散列的方括号语法获取变量,方括号中的表达式结果必须为数字。注意:第一个项目的索引为0。可以使用
[startindex..endindex]语法获取序列片段。
2-4、特殊变量:FreeMarker内定义变量,使用.variablename语法访问。 3、字符串操作
3-1、interpolation:使用${}或#{}在文本部分插入表达式的值,例如: ${\
${\也可以使用+来获得同样的结果: ${\
${username+username+username}
注意:${}只能用于文本部分而不能出现于标记内。 <#if ${user.login}>或<#if \都是错误的; <#if user.login>是正确的。
本例中user.login的值必须是布尔类型。