云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > Velocity用户手册 - 中文版(学习修改版)

Velocity用户手册 - 中文版(学习修改版)

  • 62 次阅读
  • 3 次下载
  • 2025/6/6 5:04:43

\\\\$email \\\\\\$email

注意:VTL中未被定义的变量将被认为是一个字符串,所以以下例子: #set( $foo = “gibbous” ) $moon = $foo 的输出结果是: $moon = gibbous Case substitution

现在你已经对reference比较熟悉了,你可以将他们高效的应用于你的template了。Velocity利用了很多java规范以方便了设计人员的使用。例如: $foo

$foo.getBar() ## is the same as $foo.Bar

$data.getUser(“jon”) ## is the same as $data.User(“jon”)

$data.getRequest().getServerName() # is the same as

$data.Request.ServerName ## is the same as

${data.Request.ServerName}

但是,注意VTL中不会将reference解释为对象的实例变量。例如:$foo.Name将被解释为Foo对象的getName()方法,而不是Foo对象的Name实例变量。 Directives

Reference允许设计者使用动态的内容,而directive使得你可以应用java代码来控制你的显示逻辑,从而达到你所期望的显示效果。 #set

#set directive被用于设置一个reference的值。例如: #set ( $primate = “monkey” )

#set ( $customer.Behavior = $primate )

赋值左侧的(LHS)必须是一个变量或者属性reference。右侧(RHS)可以是以下类型中一种: l 变量reference l String literal l 属性reference l 方法reference l number literal l ArrayList

下面是应用各种类型的RHS的例子:

#set ( $monkey = $bill ) ##变量reference

#set ( $monkey.Friend = “monica” ) ##String literal

#set ( $monkey.Blame = $whitehouse.Leak )##属性reference

#set ( $monkey.Plan = $spindoctor.weave($web) )##方法reference #set ( $monkey.Number = 123 )##Number literal

#set ( $monkey.Say = [“Not”, $my, “fault”] )##ArrayList 注意:最后一个例子的取值方法为:$monkey.Say.get(0) RHS也可以是一个简单的算术表达式: #set ( $value = $foo + 1 ) #set ( $value = $bar -1 ) #set ( $value = $foo * $bar ) #set ( $value = $foo / $bar )

如果你的RHS是一个null,VTL的处理将比较特殊:它将指向一个已经存在的reference,这对初学者来讲可能是比较费解的。例如: #set ( $resut = $query.criteria(“name”) ) The result of the first query is $result

#set ( $resut = $query.criteria(“address”) ) The result of the second query is $result 如果$query.criteria(“name”)返回一个“bill”,而

$query.criteria(“address”)返回的是null,则显示的结果如下: The result of the first query is bill The result of the first query is bill 看看下面的例子:

#set( $criteria = [\#foreach( $criterion in $criteria )

#set( $result = $query.criteria($criterion) ) #if( $result )

Query was successful #end #end

在上面的例子中,程序将不能智能的根据$result的值决定查询是否成功。在$result被#set后(added to the context),它不能被设置回null(removed from the context)。打印的结果将显示两次查询结果都成功了,但是实际上有一个查询是失败的。

为了解决以上问题我们可以通过预先定义的方式: #set( $criteria = [“name”, “address”] ) #foreach( $criterion in $criteria ) #set( $result = false )

#set( $result = $query.criteria( $criterion ) ) #if( $result )

Query was successful #end #end

String Literals

当你使用#set directive,String literal封闭在一对双引号内。

#set ( $directoryRoot = “www” ) #set ( $templateName = “index.vm” )

#set ( $template = “$directoryRoot/$tempateName” ) $template

上面这段代码的输出结果为:www/index.vm

但是,当string literal被封装在单引号内时,它将不被解析: #set ( $foo = “bar” ) $foo

#set ( $blargh = ‘$foo’ ) 结果: bar $foo

上面这个特性可以通过修改velocity.properties文件的

stringliterals.interpolate = false的值来改变上面的特性是否有效。 条件语句

if/elseif/else

当一个web页面被生成时使用Velocity的#if directrive,如果条件成立的话可以在页面内嵌入文字。例如: #if ( $foo )

Velocity! #end

上例中的条件语句将在以下两种条件下成立:

l $foo是一个boolean型的变量,且它的值为true l $foo变量的值不为null

这里需要注意一点:Velocity context仅仅能够包含对象,所以当我们说

“boolean”时实际上代表的时一个Boolean对象。即便某个方法返回的是一个boolean值,Velocity也会利用内省机制将它转换为一个Boolean的相同值。 如果条件成立,那么#if和#end之间的内容将被显示。 #elseif和#else元素可以同#if一同使用。例如: #if( $foo < 10 )

Go North #elseif( $foo == 10 )

Go East #elseif( $foo == 6 )

Go South #else

Go West #end

注意这里的Velocity的数字是作为Integer来比较的――其他类型的对象将使得条件为false,但是与java不同它使用“==”来比较两个值,而且velocity要求等号两边的值类型相同。 关系、逻辑运算符

Velocity中使用等号操作符判断两个变量的关系。例如: #set ( $foo = “deoxyribonucleic acid” )

#set ( $bar = “ribonucleic acid” ) #if ( $foo == $foo )

In this case it’s clear they aren’t equivalent.So? #else

They are not equivalent and this will be the output. #end

Velocity有AND、OR和NOT逻辑运算符。下面是一些例子: ## logical AND

#if( $foo && $bar )

This AND that #end

## logical OR

#if ( $foo || $bar )

This OR That #end

##logical NOT #if ( !$foo )

NOT that #end 循环

Foreach循环 例子:

    #foreach ( $product in $allProducts )

  • $product
  • #end

每次循环$allProducts中的一个值都会赋给$product变量。

$allProducts可以是一个Vector、Hashtable或者Array。分配给$product的值是一个java对象,并且可以通过变量被引用。例如:如果$product是一个java的Product类,并且这个产品的名字可以通过调用他的getName()方法得到。 现在我们假设$allProducts是一个Hashtable,如果你希望得到它的key应该像下面这样:

    #foreach ( $key in $allProducts.keySet() )

  • Key: $key -> Value: $allProducts.get($key)
  • #end

Velocity还特别提供了得到循环次数的方法,以便你可以像下面这样作:

  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

\\\\$email \\\\\\$email 注意:VTL中未被定义的变量将被认为是一个字符串,所以以下例子: #set( $foo = “gibbous” ) $moon = $foo 的输出结果是: $moon = gibbous Case substitution 现在你已经对reference比较熟悉了,你可以将他们高效的应用于你的template了。Velocity利用了很多java规范以方便了设计人员的使用。例如: $foo $foo.getBar() ## is the same as $foo.Bar $data.getUser(“jon”) ## is the same as $data.User(“jon”)

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com