1、
2、
3、
4、
5、
6、
FTL tags标签(FreeMarker 模板的语言标签):这些标签的使用一般以符号#开头。(用户自定义的FTL标签使用@符号来代替#)。
Comments注释:FreeMarker的注释和HTML的注释相似,但是它用<#--和-->来分隔。
directives指令就是所指的FTL标签。这指令在HTML的标签(如<table>和</table>)元素(如table元素)中的关系是相同的
7、
我们尊敬的领导是if条件中那唯一的user变量值,当它和“Big Joe”相同时才显示出来。当condition的判断结果为false(布尔值)时,在<#ifcondition>和</#if>标签之间的内容将会被略过。
8、
9、
10、include指令:插入其他文件的内容到当前的模板中。
11、处理不存在变量
通过放置??在变量名后面来询问FreeMarker一个变量是否存在。将它和if指令合并,那么如果user变量不存在的话将会忽略整个问候代码段
12、数值
不需要存储的数值也可以称之为数值,例如:100
当模板被执行时,计算的临时结果也称为数值,比如20,120(它会打印120)
14、支持的类型有:标量:字符串;数字;布尔值;日期
容器: 哈希表;序列;集
子程序:方法和函数;用户自定义指令
其它/很少使用:节点
15、方法和函数:
数据模型中放置了一个方法变量avg,求平均值:
16、用户自定义指令:
17、如果能够实现,请用自定义指令而不用函数/方法
①、输出(返回值)的是标记(HTML,XML等)。主要原因是函数的返回结果可以自动进行XML转义(这是因为${…}的特性),而用户自定义指令的输出则不是(这是因为<@...>的特性所致,它的输出假定为是标记,因此就不再转义)。
②、副作用是重要的,而不是返回值。例如一个指令的目的是往服务器日志中添加一个条目。(事实上你不能得到自定义指令的返回值,但有些反馈的类型是有可能设置非本地变量的)
③、会进行流程的控制(就像list或if指令那样),但是不能在函数/方法上这么做。
18、节点
19、模板的总体结构(FTL是区分大小写的)
②、Interpolation插值:这部分的输出会被计算的值来替换。插值由${和}所分隔
③、FTLtags标签:与HTML标签很相似,但它们却是给FreeMarker的指示且不会打印在输出内容中。
④、Comments注释:注释和HTML的注释很相似,但是由<#--和-->来隔的。
20、指令的调用:
对于用户自定义的指令使用@来代替#。例如:<@mydirectiveparameters>...</@mydirective>
21、备忘单
㈠、直接指定值
①字符串:"Foo" 或者 'Foo' 或者 "It's \"quoted\"" 或者 r"C:\raw\string"
②数字:123.45
③布尔值:true, false
④序列:["foo", "bar",123.45], 1..100
⑤哈希表:{"name":"green mouse","price":150}
㈡、检索变量
①顶层变量:user
②从哈希表中检索数据:user.name, user[“name”]
③从序列中检索:products[5]
④特殊变量:.main
㈢、字符串操作
①插值(或连接):"Hello ${user}!"(或"Free" + "Marker")
②获取一个字符:name[0]
㈣、序列操作
①连接:users + ["guest"]
②序列切分:products[10..19] 或 products[5..]
③哈希表操作
④连接:passwords +{"joe":"secret42"}
㈤、算数计算: (x * 1.5 + 10) / 2 - y % 100
㈥、比较:x == y, x != y, x < y, x > y, x >= y, x <= y, x < y, 等等
㈦、逻辑操作:!registered&& (firstVisit ||fromEurope)
㈧、内建函数:name?upper_case
㈨、方法调用:repeat("What", 3)
㈩、处理不存在的值
①默认值:name!"unknown" 或者(user.name)!"unknown"或者name! 或者 (user.name)!
②检测不存在的值:name?? 或者(user.name)??
22、字符串
23、FreeMarker所支持的所有的转义符序列
一种特殊的字符串就是原生字符串。在原生字符串中,反斜杠和${没有特殊的含义,它们被视为普通的字符。为了表明字符串是原生字符串,在开始的引号或单引号之前放置字母r。
24、序列
25、哈希表