Velocity简明教程1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、简介
Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。
当Velocity应用于web开发时,界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人员可以只关注页面的显示效果,而由java程序开发人员关注业务逻辑编码。Velocity将java代码从web页面中分离出来,这样为web站点的长期维护提供了便利,同时也为我们在JSP和PHP之外又提供了一种可选的方案。
Velocity的能力远不止web站点开发这个领域,例如,它可以从模板(template)产生SQL和PostScript、XML,它也可以被当作一个独立工具来产生源代码和报告,或者作为其他系统的集成组件使用。Velocity 也可以为Turbine web开发架构提供模板服务(template service)。Velocity+Turbine提供一个模板服务的方式允许一个web应用以一个真正的MVC模型进行开发。
二、基本语法
1 总括
1.1 "#"用来标识Velocity 的脚本语句,包括#set、#if 、#else、#end、#foreach、#end、#iinclude、#parse、
1.3 "{}"用来明确标识Velocity 变量。比如在页面中,页面中有一个$someonename,此时,Velocity 将把someonename 作为变量名,若我们程序是想在someone 这个变量的后面紧接着显示name 字符,则上面的标签应该改成${someone}name。
1.4 "!"用来强制把不存在的变量显示为空白。如当页面中包含$msg,如果msg 对象有值,将显示msg 的值,如果不存在msg 对象同,则在页面中将显示$msg 字符。这是我们不希望的,为了把不存在的变量或变量值为null 的对象显示为空白,则只需要在变量名前加一个“!”号即可。如:$!msgd
1 变量
1.1 变量的定义
Veloctiy是一种弱类型的语言,语法结构非常简单,但在jetspeed却非常实用。因为是一种弱类型语言,所以不用定义变量的类型,编译器根据赋值的类型自动进行判断,定义的关键字为set,set前要加#,变量名前必须加$,第一个字符必须为字母。变量可以包含的字符有以下内容:alphabetic (a .. z, A .. Z),numeric (0 .. 9),hyphen ("-"),underscore ("_")。
当使用#set指令时,括在双引号中的字面字符串(string literal)将解析和重新解释,但是,当string literal 被封装在单引号内时,它将不被解析。上面这个特性可以通过修改velocity.properties文件的stringliterals.interpolate = false的值来改变上面的特性是否有效。
注:在velocity 中使用$2.5这样的货币标识是没有问题得的,因为velocity 中的变量总是以 "$" 开头,第一个字符必须为字母。
1.2 变量规范的写法(正式格式)
${name},也可以写成:
$name 。提倡用前面的写法。例如:你希望通过一个变量$vice 来动态的组织
规范的格式书写 : Jack is a ${vice}maniac
现在Velocity 知道变量是$vice 而不是$vicemaniac 。 注意:当引用属性的时候不能加{}
$与$!的区别:当找不到username 的时候,$username 返回字符串"$username",而$!username 返回空字符串""。
双引号与引号:
1.3 变量的赋值
变量名和值的组合要放在小括号中,不必用分号结束语句。例如: 赋值的左边必须是一个变量或者是属性引用。右边可以是下面六种类型之一:
变量引用,字面字符串,属性引用,方法引用,字面数字,数组列表。支技持算术运算符。下面的例子演示了上述的每种类型: 注意:
①如果上述例子中的右值是null, 则左值不会被赋值,也就是说会保留以前的值。
在下面的例子中,左边的程序将不能智能的根据$result 的值决定查询是否成功。在$result 被#set 后(added to the context ),它不能被设置回null (removed from the context )。打印的结果将显示两次查询结果都成功了,但是实际上有一个查询是失败的。为了解决以上问题可以通过预先定义的方式,如右边程序:
2 属性
$customer.Address
$
hashtable user中的name值。类似:user.get("name")
$customer.Address有两种含义。它可以表示:查找hashtable对象customer中以Address为关键字的值;也可以表示调用customer对象的getAddress()方法。当你的页面被请求时,Velocity将确定以上两种方式选用那种,然后返回适当的值。
正式格式:${customer.Address}
3 方法
object user.getName() = $user.getName()
一个方法就是被定义在java中的一段代码,并且它有完成某些有用工作的能力,例如一个执行计算和判断条件是否成立、满足等。方法是一个由$开始并跟随VTL标识符组成的References,一般还包括一个
前两个例子$customer.getAddress()和$purchase.getTotal()看起来挺想上面的属性$customer.Address 和$purchase.Total。如果你觉得他们之间有某种联系的话,那你是正确的。
VTL属性可以作为VTL方法的缩写。$customer.Address属性和使用$customer.getAddress()方法具有相同的效果。如果可能的话使用属性的方式是比较合理的。属性和方法的不同点在于你能够给一个方法指定一个参数列表。
正式格式:${purchase.getTotal()}