Velocity用户手册中文版.docx
《Velocity用户手册中文版.docx》由会员分享,可在线阅读,更多相关《Velocity用户手册中文版.docx(30页珍藏版)》请在冰豆网上搜索。
![Velocity用户手册中文版.docx](https://file1.bdocx.com/fileroot1/2022-10/12/56c37b9d-f502-41fb-88b2-041d8bda29ad/56c37b9d-f502-41fb-88b2-041d8bda29ad1.gif)
Velocity用户手册中文版
Velocity用户手册--中文版
1关于
Velocity用户指南旨在帮助页面设计者和内容提供者了解Velocity和其简单而又强大的脚本语言(VelocityTemplateLanguage(VTL))。
本指南中有很多示例展示了用Velocity来讲动态内容嵌入到网站之中,但是所有的VTLexamples都同演示用于所有的页面和模版。
感谢选择Velocity!
2Velocity是什么?
Velocity是一个基于java的模板引擎(templateengine)。
它允许任何人仅仅简单的使用模板语言(templatelanguage)来引用由java代码定义的对象。
Velocity的能力远不止web站点开发这个领域,例如,它可以从模板(template)产生SQL和PostScript、XML,它也可以被当作一个独立工具来产生源代码和报告,或者作为其他系统的集成组件使用。
Velocity也可以为Turbineweb开发架构提供模板服务(templateservice)。
Velocity+Turbine提供一个模板服务的方式允许一个web应用以一个真正的MVC模型进行开发。
3Velocity能为我们作什么?
3.1TheMudStoreExample
假设你是一家专门出售泥浆(Mud)的在线商店的页面设计人员,让我们暂且称它为“在线MUD商店”。
你们的业务很旺,客户下了各种类型和数量的mud订单。
他们都是通过输入用户名和密码后才登陆到你的网站,登陆后就允许他们查看订单并购买更多的mud。
现在,一种非常流行的mud正在打折销售。
另外有一些客户规律性的购买另外一种也在打折但是不是很流行的BrightRedMud,由于购买的人并不多所以它被安置在页面的边缘。
所有用户的信息都是被跟踪并存放于数据库中的,所以某天有一个问题可能会冒出来:
为什么不使用velocity来使用户更好的浏览他们感兴趣的商品呢?
Velocity使得web页面的客户化工作非常容易。
作为一个website的设计人员,你希望每个用户登陆时都拥有自己的页面。
你会见了一些公司内的软件工程师,你发现他们每个人都同意客户应该拥有具有个性化的信息。
那让我们把软件工程师应该作的事情发在一边,看一看你应该作些什么吧。
你可能在页面内嵌套如下的VTL声明:
Hello$customer.Name!
#foreach($mudin$nudsOnSpecial)
#if($customer.hasPurchased($mud))
$flogger.getPromo($mud) |
#end
#end
4VelocityTemplateLanguage(VTL)介绍
Velocity模板语言(VTL)旨在为Web页面结合动态内容提供最容易、简单和简洁的方法。
即使有一点或者没有编程经验的页面设计者也可以很快能为页面提供动态内容。
VTL使用引用(references)来在website内嵌套动态内容,一个变量就是一种类型的reference。
变量是某种类型的refreence,它可以指向java代码中的定义,或者从当前页面内定义的VTLstatement得到值。
下面是一个VTLstatement的例子,它可以被嵌套到HTML代码中:
#set($a=“Velocity”)
和所有的VTLstatement(语句)一样,这个statement以#字符开始并且包含一个directive(指令):
set。
当一个在线用户请求你的页面时,VelocityTemplatingEngine将查询整个页面以便发现所有#字符,然后确定哪些是VTLstatement,哪些不需要VTL作任何事情。
#字符后紧跟一个directive(指令):
set时,这个setdirective使用一个表达式(使用括号封闭)——一个方程式分配一个值给变量。
变量被列在左边,而它的值被列在右边,最后他们之间使用=号分割。
在上面的例子中,变量是$a,而它的值是Velocity。
和其他的references一样以$字符开始,而值总是以双引号封闭。
Velocity中仅有String可以被赋值给变量。
记住以下的规则:
使用$字符开始的references用于得到什么;使用#字符开始的directives用于作些什么。
5HelloVelocityWorld!
一旦某个变量被分配了一个值,那么你就可以在HTML文件的任何地方引用它。
在下面的例子中,一个值被分配给$foo变量,并在其后被引用。
#set($foo=“Velocity”)
Hello$fooWorld!
上面的实现结果是在页面上打印“HelloVelocityWorld!
”
为了使包含VTLdirectives的statement更具有可读性,我们鼓励你在新行开始每个VTLstatement,尽管你不是必须这么作。
Setdirective将在后面详细描述。
6注释
可以用注释加入描述性文本,他们并不在模板引擎中输出。
注释可以有助于你的记忆或者想其他人解释你的VTL语句正在做什么。
单行注释以##开始,并在本行结束。
##Thisisasinglelinecomment.
如果需要加入多行注释,并不需要加入很多的单行注释。
多行注释,以#*开始并以*#结束可以处理这种情况。
#*
Thusbeginsamulti-linecomment.Onlinevisitorswon’t
seethistextbecausetheVelocityTemplatingEnginewill
ignoreit.
*#
还有第三种注释,VTL注释块(文档格式),可以用来存储诸如文档作者、版本信息等。
#**
ThisisaVTLcommentblockand
maybeusedtostoresuchinformation
asthedocumentauthorandversioning
information:
@version5
@author
*#
7引用的类型References
在VTL中有三种类型的references:
变量(variables)、属性(properties)、方法(methods)。
作为一个使用VTL的页面设计者,你和你的工程师必须就references的名称达成共识,以便你可以在你的template中使用它们。
有关引用的所有参数都处理为字符串对象。
EverythingcomingtoandfromareferenceistreatedasaStringobject。
如果有一个对象$foo是一个Integer对象,那么Velocity将调用它的toString()方法将这个对象转型为String类型。
7.1变量Variables
变量的简略标记是有一个前导"$"字符后跟一个VTL标识符(Identifier)组成。
一个VTL标识符必须以一个字母开始(a..z或A..Z)。
剩下的字符将由以下类型的字符组成:
alphabetic(a..z,A..Z)字母
numeric(0..9)数字
hyphen("-")连字符
underscore("_")下划线
下面是一些有效的变量引用:
$foo
$mudSlinger
$mud-slinger
$mud_slinger
$mudSlinger1
当VTL引用一个变量时,比如$foo,变量可以从模板的set指令取得值,也可以从Java代码中取得。
例如,如果Java变量$foo在模板被请求的时候具有值bar,则bar将替换页面中的所有$foo的实例。
或者,如果包含下面的语句:
#set($foo="bar")
紧跟指令后的所有$foo的实例的输出将会一样值。
7.2属性Properties
VTL引用的第二种元素是属性,而属性具有独特的格式。
属性的简略标记识前导符$后跟一个VTL标识符,在后跟一个点号(".")最后又是一个VTL标识符。
这是一些有效的示例:
$customer.Address
$purchase.Total
$customer.Address有两种含义。
它可以表示:
查找hashtable对象customer中以Address为关键字的值;也可以表示调用customer对象的getAddress()方法。
当你的页面被请求时,Velocity将确定以上两种方式选用那种,然后返回适当的值。
7.3方法Methods
一个方法就是被定义在java中的一段代码,并且它有完成某些有用工作的能力,例如一个执行计算和判断条件是否成立、满足等。
方法是一个由$开始并跟随VTL标识符组成的References,一般还包括一个VTL方法体。
例如:
$customer.getAddress()
$purchase.getTotal()
$page.setTitle(“MyHomePage”)
$person.setAttributes([“Strange”,“Weird”,“Excited”])
前两个例子$customer.getAddress()和$purchase.getTotal()看起来挺像上面的属性$customer.Address和$purchase.Total。
如果你觉得他们之间有某种联系的话,那你是正确的。
VTL属性可以作为VTL方法的缩写。
$customer.Address属性和使用$customer.getAddress()方法具有相同的效果。
如果可能的话使用属性的方式是比较合理的。
属性和方法的不同点在于你能够给一个方法指定一个参数列表。
我们或许希望方法可以为我们放回属于太阳系的行星的名字,喂养我们的蚯蚓,或者从相册中返回一张照片。
下面只有长的那个标记是可以工作的方法:
$sun.getPlanet(["Earth","Mars","Neptune"])
##不能将参数列表传递给$sun.Planets
$sisyphus.pushRock()
##Velocity假定我意思是$sisyphus.getRock()
$book.setTitle("HomagetoCatalonia")
##不能传递一个参数列表
7.4Formalreferencenotation正式引用符
reference的正式格式如下:
变量
${mudSlinger}
属性
${customer.Address}
方法
${purchase.getTotal()}
非正式格式更见常用,但是有时还是使用正是格式比较适合。
例如:
你希望通过一个变量$vice来动态的组织一个字符串。
Jackisa$vicemaniac.
本来变量是$vice现在却变成了$vicemaniac,这样Veloctiy就不知道您到底要什么了。
所以,应该使用正是格式书写:
Jackisa${vice}maniac
现在Velocity知道变量是$vice而不是$vicemaniac。
7.5Quietreferencenotation安静引用符
例如: