FreeMarker-模板专注于显示问题(视觉设计,布局和格式化)

当客户端访问某个页面时,FreeMaker就发送HTML代码到客户端浏览器中显示。数据模型:目录角色:称为哈希表hashes,哈希表存储的其他变量称为子变量,可以通过名称查找,存储单值得变量称为标量:在模板中使用子变量应该从根路径root指定它的路径,用.分割序列(Sequence):像hash表那样存储子变量,但是子变量没有名字,只是列表中的项使用【下标】(下标从0开始)。标量类型:

1.字符串:文本,任意的字符序列

2.数字:数值类型,字符串:“50”和数字50是两种完全不同的东西,前者是两个字符的序列,后者是在数学运算中直接被使用的数值。

3.日期、时间:存储某一天的时间(日期-时间),或者是日期或者是时间

4.布尔值:对应着对或错总结:

1.数据模型可以被看做树形结构

2.标量用于存储单一的值,字符串,数字,日期、时间或者是布尔值

3.哈希表是一种存储变量及其相关且有唯一标示的容器

4.序列是存储有序变量的容器,存储的变量可以通过数字索引来检索,索引经常从0开始内建函数:用?代替.访问,区别子变量不存在的变量:决不能容忍,除非明确告知它当变量不存在时如何处理。不存在的变量和值为null的变量对于freemarker是一样的,所以这里的丢失包含这两种情况。

1.文本:直接输出

2.注释:<#-- -->

3.插值:${ },#{ }使用数据模型中的数据代替

4.FTL(FreeMarker Template Language)指令:FreeMarker指定,名字前加上#区分,不会输出指令规则:使用指令时#也可变成@,如果该指令是一个用户指令而不是系统内建指令时将#改为@,使用FTL标签时,应该有正确的嵌套,使用不存在的指令,FreeMarker不会使用用模板输出,而会产生错误消息,FreeMarker会忽略FTL标签的空白字符,< ,/>和指令之间不允许有空白字符。

1.开始标签<#指令名 参数名 >

2.结束标签</#指令名>

3.空标签<#指令名 参数>if指令:<#if condition></#if>指令或插值中没有被引号标注的内容都被视为变量的引用,在模板中的字符串只能放在引号内。<#if condition >content<#elseif condition >content<#else>content</#if>如果变量本身就是布尔值则可以直接让其作为conditionlist指令:当需要列表显示内容时<#list Sequence as var>${var.attr}</#list>第二种显示:<#list Sequence><#items as var>${var}</#items></#list>另一种显示:<#list Sequence as var>${var}<#sep>分隔符**</#sep>可以省略**</#list><#sep>只有当还有下一项时才会被执行include指令:<#includde "path">

插值规则:

1.1通用插值:

(1)插值结果为字符串,直接输出结果。

(2)插入数值,根据默认格式(由#setting指令设置)将表达式结果转换成文本输出

(3)插值仅可以在两种位置使用,文本区和字符串表达式中,表达式的结果必须为字符串数字或日期/时间 日期-时间值、只有这些值可以被自动转换为字符串

自定义指令macro:

继承 freemarker.template.TemplateDirectiveModel类扩展实现指令定义

宏是有变量名的模板变量,可以在模板中使用宏作为自定义指令,这样能进行重复性工作

macro指令自身不输出任何内容,用来创建宏变量

<#macro name></#macro>

调用自定义指令,称为宏调用<@name/>

参数:宏名称后面的位置用来定义参数,宏参数的真实值是可以作为变量放在宏定义体中的,使用预定义指令时,参数的值可以是FTL表达式,参数数量不限,参数顺序不限,使用宏指令时必须给出全部参数,不多不少,除非有默认值。

命名空间:使用assign或者macro指令创建的变量的集合,这样的变量集合被称为命名空间

<#include "path"/>使用同一个主命名空间

<#import “path”/>创建一个新的命名空间,而且通过import的调用者创建一个女新的哈希表变量

import的生存周期:相同路径只会import一次创建命名空间并执行模板,后面相同路径的import只是创建一个哈希表当做访问相同命名空间的“门”,命名空间不分层次,他们相互独立,每一次模板的执行过程,都有一个私有的命名空间的集合。每一次模板执行工作都是一个分离且有序的过程,仅仅存在一段很短的时间,同时页面用以渲染内容,然后就和所有提案冲过的命名空间一起消失

Configuration:

configuration实例是存储FreeMarker应用级设置的核心部分,同时,他也是创建和预解析模板的工作,也许只在应用生命周期的开始执行一次,Configuration是单实例配置,不管一个系统有多少组件使用,他们都有自己私有的Configuration,不能重复创建,代价很高,尤其会丢失缓存,应用级的单例。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值