FreeMarker-1

来源:互联网 发布:格罗玛什地狱咆哮知乎 编辑:程序博客网 时间:2024/05/21 18:49

1、 模板+ 数据模型= 输出

2、 MVC模式:Model-View-Controller的缩写,中文翻译为"模型-视图-控制器"。

3、 哈希表通过可查找的名称来访问存储的其他空间

4、 用数组的方括号方式来访问一个序列的子变量:animals[0].name;whatnot.fruits[1],索引通常从零开始。

5、 标量存储单一的值,这种类型的值可以是字符串,数字,日期/时间或者是布尔值。

6、 ${…}:FreeMarker将会输出真实的值来替换花括号内的表达式。

FTL tags标签(FreeMarker 模板的语言标签):这些标签的使用一般以符号#开头。(用户自定义的FTL标签使用@符号来代替#)。

Comments注释:FreeMarker的注释和HTML的注释相似,但是它用<#--和-->来分隔。

directives指令就是所指的FTL标签。这指令在HTML的标签(如<table>和</table>)元素(如table元素)中的关系是相同的

7、 使用if指令可以有条件地跳过模板的一部分,

 

我们尊敬的领导是if条件中那唯一的user变量值,当它和“Big Joe”相同时才显示出来。当condition的判断结果为false(布尔值)时,在<#ifcondition>和</#if>标签之间的内容将会被略过。

8、 使用<#else>标签可以指定当条件为假时程序可以执行的内容。  

9、 list指令的一般格式为:<#list sequence asloopVariable>repeatThis</#list>

            sequence:序列;repeatThis:在给定的sequence遍历时的每项中重复,从第一项开始,一个接着一个。

10、include指令:插入其他文件的内容到当前的模板中。 

   Include里面包含的是一个网址,显示的是网址里面的全部内容!

11、处理不存在变量

 

通过放置??在变量名后面来询问FreeMarker一个变量是否存在。将它和if指令合并,那么如果user变量不存在的话将会忽略整个问候代码段

12、数值

不需要存储的数值也可以称之为数值,例如:100 

当模板被执行时,计算的临时结果也称为数值,比如20,120(它会打印120)

 

14、支持的类型有:标量:字符串;数字;布尔值;日期

容器: 哈希表;序列;集

子程序:方法和函数;用户自定义指令

其它/很少使用:节点

15、方法和函数:

数据模型中放置了一个方法变量avg,求平均值:

16、用户自定义指令:

      假设现在有一个变量,box,它的值是用户自定义的指令,用来打印一些特定的HTML信息,这个指令定义了一个标题和其中的信息。    

17、如果能够实现,请用自定义指令而不用函数/方法

①、输出(返回值)的是标记(HTML,XML等)。主要原因是函数的返回结果可以自动进行XML转义(这是因为${…}的特性),而用户自定义指令的输出则不是(这是因为<@...>的特性所致,它的输出假定为是标记,因此就不再转义)。

②、副作用是重要的,而不是返回值。例如一个指令的目的是往服务器日志中添加一个条目。(事实上你不能得到自定义指令的返回值,但有些反馈的类型是有可能设置非本地变量的)

③、会进行流程的控制(就像listif指令那样),但是不能在函数/方法上这么做。

18、节点

   节点的主要作用是拓扑信息,还可以存储节点名称,类型(字符串),命名空间(字符串)。

19、模板的总体结构(FTL是区分大小写的)

    ①、Text文本:文本会照着原样来输出。

②、Interpolation插值:这部分的输出会被计算的值来替换。插值由${}所分隔

③、FTLtags标签:与HTML标签很相似,但它们却是给FreeMarker的指示且不会打印在输出内容中。

④、Comments注释:注释和HTML的注释很相似,但是由<#---->来隔的。

  注:FTL是区分大小写的,插值仅仅可以在文本中间使用(也可以在字符串表达式中)。FTL标签不可以在其他FTL标签和插值中使用。注释可以放在FTL标签和插值中间。

20、指令的调用:

     如调用list指令:在语法上使用了两个标签:<#list animals asbeing>和</#list>。

对于用户自定义的指令使用@来代替#。例如:<@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 &lt; 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、哈希表

   在模板中指定一个哈希表,就可以遍历用逗号来分隔的“键/值”对,把列表放到花括号内。

   例如:{"name":"green mouse","price":150}。

0 0