没有合适的资源?快使用搜索试试~ 我知道了~
Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。
资源推荐
资源详情
资源评论
技术文档模板
一、简介
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、#macro 等,例如:
#if($info.imgs)
<img src="$info.imgs" border=0>
#else
<img src="noPhoto.jpg">
#end
1.2 "$"用来标识一个对象(或理解为变量);如$i、$msg、$TagUtil.options(...)等。
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 的值来改变上面的特性是否有效。
文档编号:07000-V1
1
技术文档模板
#set($directoryRoot = "www" )
#set($templateName = "index.vm" )
#set($template = "$directoryRoot/$templateName" )
$template
#set ( $foo = “bar” )
$foo
#set ( $blargh = ‘$foo' )
$blargh
输出将会是:www/index.vm 结果:bar $foo
注:在 velocity 中使用$2.5 这样的货币标识是没有问题得的,因为 velocity 中的变量总是以 "$" 开头,第
一个字符必须为字母。
1.2 变量规范的写法(正式格式)
${name},也可以写成:$name。提倡用前面的写法。例如:你希望通过一个变量$vice 来动态的组织
一个字符串。
Jack is a $vicemaniac.
本来变量是$vice 现在却变成了$vicemaniac,这样 Veloctiy 就不知道您到底要什么了。所以,应该使
用规范的格式书写 : Jack is a ${vice}maniac
现在 Velocity 知道变量是$vice 而不是$vicemaniac。
注意:当引用属性的时候不能加{}
$与$!的区别:当找不到 username 的时候,$username 返回字符串"$username",而$!username 返回空字符
串""。
双引号与引号:
#set($var="hello")
test"$var" 返回 testhello
test'$var' 返回 test'$var'
可以通过设置 stringliterals.interpolate=false 改变默认处理方式
1.3 变量的赋值
变量名和值的组合要放在小括号中,不必用分号结束语句。例如:
#set($maxValue=5) #set($name="Bob")
赋值的左边必须是一个变量或者是属性引用。右边可以是下面六种类型之一:变量引用,字面字符
串,属性引用,方法引用,字面数字,数组列表。支技持算术运算符。下面的例子演示了上述的每种类
型:
#set($monkey=$bill) ##variable reference
#set($monkey.Friend="monica") ##string
#set($monkey.Blame=$whitehouse.Leak) ##property reference
#set($monkey.Plan=$spindoctor.weave($web)) ##method reference
#set($monkey.Number=123) ##number
#set($monkey.Say=["Not",$my,"fault"]) ##ArrayList
注意:最后一个例子的取值方法为:$monkey.Say.get(0)
算术表达式:
#set ( $value = $foo + 1 )
#set ( $value = $bar -1 )
#set ( $value = $foo * $bar )
#set ( $value = $foo / $bar )
注意:
① 如果上述例子中的右值是 null, 则左值不会被赋值,也就是说会保留以前的值。
在下面的例子中,左边的程序将不能智能的根据$result 的值决定查询是否成功。在$result 被#set 后
(added to the context),它不能被设置回 null(removed from the context)。打印的结果将显示两次查询
结果都成功了,但是实际上有一个查询是失败的。为了解决以上问题可以通过预先定义的方式,如右边
文档编号:07000-V1
2
技术文档模板
程序:
有问题的: 修改后的:
#set( $criteria = ["name", "address"] )
#foreach( $criterion in $criteria )
#set( $result = $query.criteria($criterion) )
#if( $result )
Query was successful
#end
#end
#set( $criteria = [“name”, “address”] )
#foreach( $criterion in $criteria )
#set( $result = false )
#set( $result = $query.criteria( $criterion ) )
#if( $result )
Query was successful
#end
#end
②velocity 模板中未被定义的变量将被认为是一个字符串。例如:
#set($foo="gibbous")
$moon=$foo
输出结果为:$moon=gibbous
③velocity 模板中不会将 reference 解释为对象的实例变量。例如:$foo.Name 将被解释为 Foo 对象的
getName()方法,而不是 Foo 对象的 Name 实例变量。例如:
$foo.getBar() 等同于$foo.Bar ;
$data.getUser("jon") 等同于$data.User("jon") ;
data.getRequest().getServerName() 等同于$data.Request.ServerName 等同于${data.Request.ServerName}
2 属性
$customer.Address
$user.name
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,一般还包括一
个 VTL 方法体。例如:
$customer.getAddress()
$purchase.getTotal()
$page.setTitle( “My Home Page” )
$person.setAttributes( [“Strange”, “Weird”, “Excited”] )
前两个例子$customer.getAddress()和$purchase.getTotal()看起来挺想上面的属性$customer.Address 和
$purchase.Total。如果你觉得他们之间有某种联系的话,那你是正确的。
VTL 属性可以作为 VTL 方法的缩写。$customer.Address 属性和使用$customer.getAddress()方法具有相同的
效果。如果可能的话使用属性的方式是比较合理的。属性和方法的不同点在于你能够给一个方法指定一
文档编号:07000-V1
3
剩余16页未读,继续阅读
资源评论
Jone_yuan
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功