Open Java Project

Keep it simple, Stupid, Less is more

原创 FreeMarker设计指南(2) 收藏

2、数据模型

1)基础

l         在快速入门中介绍了在模板中使用的三种基本对象类型:scalarshashes sequences,其实还可以有其它更多的能力:

Ø         scalars:存储单值

Ø         hashes:充当其它对象的容器,每个都关联一个唯一的查询名字

Ø         sequences:充当其它对象的容器,按次序访问

Ø         方法:通过传递的参数进行计算,以新对象返回结果

Ø         用户自定义FTL标记:宏和变换器

l         通常每个变量只具有上述的一种能力,但一个变量可以具有多个上述能力,如下面的例子:

(root)
 |
 +- mouse = "Yerri"
     |
     +- age = 12
     |
     +- color = "brown">  

l         mouse既是scalars又是hashes,将上面的数据模型合并到下面的模板:

${mouse}       <#-- use mouse as scalar -->
${mouse.age}   <#-- use mouse as hash -->
${mouse.color} <#-- use mouse as hash -->  

l         输出结果是:

Yerri
12
brown  

2Scalar变量

l         Scalar变量存储单值,可以是:

Ø         字符串:简单文本,在模板中使用引号(单引号或双引号)括起

Ø         数字:在模板中直接使用数字值

Ø         日期:存储日期/时间相关的数据,可以是日期、时间或日期-时间(Timestamp);通常情况,日期值由程序员加到数据模型中,设计者只需要显示它们

Ø         布尔值:truefalse,通常在<#if …>标记中使用

3hashes sequences和集合

l         有些变量不包含任何可显示的内容,而是作为容器包含其它变量,者有两种类型:

Ø         hashes:具有一个唯一的查询名字和它包含的每个变量相关联

Ø         sequences:使用数字和它包含的每个变量相关联,索引值从0开始

l         集合变量通常类似sequences,除非无法访问它的大小和不能使用索引来获得它的子变量;集合可以看作只能由<#list …>指令使用的受限sequences

4)方法

l         方法变量通常是基于给出的参数计算值

l         下面的例子假设程序员已经将方法变量avg放到数据模型中,用来计算数字平均值:

The average of 3 and 5 is: ${avg(3, 5)}
The average of 6 and 10 and 20 is: ${avg(6, 10, 20)}
The average of the price of python and elephant is: ${avg(animals.python.price, animals.elephant.price)}

5)宏和变换器

l         宏和变换器变量是用户自定义指令(自定义FTL标记),会在后面讲述这些高级特性

6)节点

l         节点变量表示为树型结构中的一个节点,通常在XML处理中使用,会在后面的专门章节中讲述

发表于 @ 2004年11月02日 22:37:00|评论(loading...)

新一篇: AspectWerkz简介 | 旧一篇: FreeMarker设计指南(1)

用户操作
[即时聊天] [发私信] [加为好友]
nelson_tu
订阅我的博客
XML聚合  FeedSky
nelson_tu的公告


自从2005年04月05日
(061800)

Dynamic Script Language
DOTNET2_BEGINNER

文章分类
收藏
AJAX
Ajax.NET(RSS)
AjaxFaces(RSS)
Ajaxian(RSS)
BACKBASE(RSS)
DWR(RSS)
Prototype(RSS)
SAJAX(php/perl/python)(RSS)
AOP&AspectJ
AspectWerkz(RSS)
eBook&Articles
Codehaus Docs(RSS)
CodeZoo(RSS)
FlazX(RSS)
huihoo(灰狐)(RSS)
IBM developerWorks(RSS)
ITPUB论坛(RSS)
java.net articles(RSS)
Onjava.com(RSS)
TheServerSide(RSS)
中国E书网(RSS)
Eclipse
Eclipse Article(RSS)
Eclipse.org(RSS)
Plugins(RSS)
中国Eclipse社区(RSS)
Groovy
Groovy开源项目(RSS)
Just Groovy(RSS)
J2EE Framework
Apache Geronimo(RSS)
Avalon Project(RSS)
Spring(RSS)
Spring 中文论坛(RSS)
Open Project
ActiveMQ(RSS)
QDox(RSS)
Open Source
Apache Project(RSS)
Caucho(RSS)
Codehaus.org(RSS)
dev2dev(RSS)
Exadel(RSS)
JBoss(RSS)
Jetty(RSS)
Sourceforge.net(RSS)
ORM&DAO
Cayenne(RSS)
Hibernate.org(RSS)
Hibernate中文网(RSS)
iBATIS(RSS)
PDF
iText(RSS)
Template Engine
Freemarker(RSS)
Velocity Project(RSS)
Xkins(RSS)
Web MVC Framework
Aurora MVC(RSS)
OpenSymphony(RSS)
Wicket Project(RSS)
其它
上海城市交通(RSS)
西安信息资源网(RSS)
友情blog
Craig's stack trace(RSS)
HongSoft 动力(RSS)
Ken Egervari(RSS)
Open Java Project (BlogJava)(RSS)
一地鸡毛(RSS)
图图日记(RSS)
星月夜(RSS)
邢红瑞的blog(RSS)
存档
软件项目交易
Csdn Blog version 3.1a
Copyright © nelson_tu