FreeMarker学习笔记(模板部分)

Data Model
FreeMarker的Data Model与JSF的Component Tree概念很类似,就是一个Tree的数据结构;
在模板中的变量访问形式是:${var},而在Velocity中是$var.
几个概念:
hashes:一个节点如果有多个子节点,那么通过访问,这个节点就是hashes
scalars:叶子节点就是scalars【标量?】
sequences:一个节点如果是容器的话,其child就是一个sequence,与hashes不同的是,是通过数组来访问的,没有主键, for example: root.animals[0].name
Template:
interpolations:${var}
FTL Tag: 类似HTML的标签,不过以#开头,一部分特定的FTL标签还会以@开头;
Comment:评注用<#-- comments --> 而不是
几个FTl TAG(Directives):有两种directives,预定义的指令与用户定义指令,如果是用户定义的指令,用@开头。<@mydirective ...>...@mydirectives>
<#if ...>...#if>
<#list vars as var> ${var} #list>
<#include "../somefile.html">
Methods:
FreeMarker中也可以定义方法,可以在页面中直接调用,比如${avg(3,5)},在后台有一个类实现TemplateMethodModel,该类需要有一个exec(List)方法来实现自定义方法的逻辑。当然,这个avg方法也需要通过dataModel.put("avg",AvgMethod)来显式的声明的。
Micro and Transforms: 宏和转换都可以看作是用户自定义的FTL。Transforms定义和Methods类似,需要在后台有一个匹配的实现类,该类实现了TemplateTransformModel接口,该接口中有一个方法getWriter(),返回一个用于转换变形的Writer,一般用内部类来实现。
Micro:
定义宏的方法很简单<#micro micro_name ..> ${param1} #micro> 使用宏时用<@micro_name />
#Nested:是被宏包围定义的文本内容,比如<@mymicro>this is a nested content@mymicro>,宏定义时用<#micro mymicro>#nested#micro>
定义变量:
通过#assign指令来定义或改变变量的值,需要注意变量的作用范围,有local, loop等
Namespaces:
在通过<#include "xxx.ftl" as ns>之后,可以用ns.items.item来访问原来定义在xxx.ftl中的变量,这个ns就是一个命名空间。

你可能感兴趣的:(FreeMarker学习笔记(模板部分))