入门
模板 + 数据模型 = 输出
数据模型
- 数据模型的基本结构是树状的.
- 标量用于存储单一的值.这种类型的值可以是字符串,数字,日期/时间或者布尔值
- 哈希表是一种存储变量及其相关且有唯一标识名称的容器
- 序列是存储有序变量的容器.存储的变量可以通过数字索引来检索,索引通常从0开始.
值域
- start..end: 包含结尾的值域
- start..<end或者start..!end: 不包含结尾的值域
- start..*length: 限定长度的值域.
- start..: 无右边界值域.
-
注意
- 值域表达式本身没有方括号
- 可以在..的两侧编写自述表达式而不需要圆括号
- .., ..<, ..!, ..*是去处符,所以它们中间不能有空格.
- 无右边界值域的定义大小是2147483647
- 值域并不存储它们包含的数字.
哈希表
- 像连接字符串那样,也可以使用加号的方式来连接哈希表.如果两个哈希表含有键相同的项,那么在加号右侧的哈希表中的项优先.
模板
- 插值: ${paramsName}
- FTL标签 FTL标签与HTML标签有一些相似之处,这些标签的名称以#开头, 用户自定义的FTL标签则需要使用@来代替#.
- 注释注释使用<#– and –> 来标识
- 其它任何不是FTL标签,插值或注释的内容被视为静态文本,这些东西不会被FreeMarker所解析, 会被按照原样输出来.
基本指令
- IF指令
- list指令展示列表内容
- 基本
- 如果列表为空的话,整个列表都不展示
- 如果列表为空的话展示一些其它信息
- include指令使用include指令, 我们可以在模板中插入其他文件的内容. 比如: 版权信息.
联合使用指令
在页面中,指令间可以很容易地相互嵌套.
内建函数
内建函数可以链式操作.
- user?html 给出user的HTML转义版本
- user?upper_case: 给出user值的大写版本
- user?cap_first: 给出user的首字母大写版本
- user?length: 给出user值中字符的数量
- user?size: 给出user序列中项目的企业
- 如果在<#list animals as animal>和对应的</#list>标签中
- animal?index: 给出了在animals中基于0开始的animal的索引值
- animal?counter: 也像index, 但是给出的是基于1的索引值
- animal?item_parity: 基于当前计数的奇偶性,给出字符串"odd"或"even"
- 一些内奸函数需要参数来指定行为
- animal.protected?string(“Y”, “N”): 基于animal.protected的布尔值来返回字符串"Y"或者"N"
- animal?item_cycle(’lightRow’, ‘darkRow’): 是之前item_parity更为常用的变形形式
- animals.join(", “): 通过连接所有项, 将列表转换为字符串,在每个项目之间插入参数分隔符.
- user?starts_with(“J”): 根据user的首字母是否是"J"返回布尔值true或false
处理不存在的变量
- 通过在变量名后面跟着一个叹号和默认值, 例
- 通过在变量名后面放置??来询问一个变量是否存在.将它和if指定合并,那么如果user变量不存在的话将会忽略整个问题语句, 例: