Velocity初级入门指南Word下载.docx
- 文档编号:17305770
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:37
- 大小:36.72KB
Velocity初级入门指南Word下载.docx
《Velocity初级入门指南Word下载.docx》由会员分享,可在线阅读,更多相关《Velocity初级入门指南Word下载.docx(37页珍藏版)》请在冰豆网上搜索。
记住,你不需要担心软件工程师如何从数据库中取得顾客信息,但你必须知道他们可以。
这样可以使你专注于你的工作而软件工程师则忙于他们自己的工作。
你可以在你的页面中嵌入如下的VTL语句:
<
HTML>
BODY>
Hello$customer.Name!
table>
#foreach($mudin$mudsOnSpecial)
#if($customer.hasPurchased($mud))
<
tr>
td>
$flogger.getPromo($mud)
/td>
/tr>
#end
#end
/table>
foreach语句的细节将进一步细说,但重要的是这个短小的脚本居然可以在你的站点上运行。
当有一个倾向于亮红土的顾客登陆进来时,亮红土正在促销,这就是这个顾客所看到的,并且促销显示非常显著。
如果另外一个长期购买赤陶土的顾客登陆进来,赤陶土促销的提示信息则应该在前面中间位置。
Velocity是非常灵活的,受限的只是你的创造力。
写在VTL参考文档中的是其他Velocity元素,他们一起给你很强大的能力和灵活性以创建很好的站点。
待你更加了解这些元素,就可以开始释放Velocity的强大动力。
4.
Velocity模板语言(VTL):
介绍
Velocity模板语言(VTL)旨在为Web页面结合动态内容提供最容易、简单和简洁的方法。
即使有一点或者没有编程经验的页面设计者也可以很快能为页面提供动态内容。
VTL使用引用(references)来将动态内容嵌入web页面,每个变量就是某一个类型的引用。
变量实际上是一个可以调用定义在java代码中的内容的引用,或者它可以从页面内的VTL语句得出自身的值。
下面是一个例子,说明可以嵌入到HTML文档中的VTL语句。
#set($a="
Velocity"
)
这个VTL语句,就像所有的VTL语句一样,以#字符开始,并跟着一个指令set。
当一个在线访问这请求页面时,Velocity模伴引擎在页面内搜索所有#字符,然后决定是哪一个标记了VTL语句的开始,哪个标记不需要VTL做什么动作。
#字符后面紧跟一个指令set.。
set指令使用一个括在括号内的表达式---一个等式将一个值指派给一个变量。
变量在等号的左边而值在等号的右边。
在上面的示例中,变量是$a值是Velocity。
这个变量就象其他引用一样,以一个$字符开始。
值通常在引号之中,对Velocity来说一般没有类型冲突的问题,因为只有字符串(基于文本的信息)可以传递给变量。
下面的主要规则可能有助于理解Velocity是如何工作的:
引用以$开头用于取得什么东西,而指令以#开始用于做什么事情。
在上面的例子中,#set用于将一个值指派给一个变量。
而变量$a则可以用来在模板中输出"
。
5.
HelloVelocityWorld!
一旦一个值被赋给一个变量,便可以在HTML中随处引用它。
在下面的示例中,先给变量$foo赋值然后引用它。
html>
body>
#set($foo="
)
Hello$fooWorld!
/body>
这个页面的结果是输出"
HelloVelocityWorld!
"
为了使包含VTL指令的语句具有可读性,我们鼓励每个VTL语句在一个新行开始,虽然并不一定要这样做。
set将随后深入解释。
6.
注释
可以用注释加入描述性文本,他们并不在模板引擎中输出。
注释可以有助于你的记忆或者想其他人解释你的VTL语句正在做什么。
##Thisisasinglelinecomment.
单行注释以##开始,并在本行结束。
如果需要加入多行注释,并不需要加入很多的单行注释。
多行注释,以#*开始并以*#结束可以处理这种情况。
Thisistextthatisoutsidethemulti-linecomment.
Onlinevisitorscanseeit.
#*
Thusbeginsamulti-linecomment.Onlinevisitorswon'
t
seethistextbecausetheVelocityTemplatingEnginewill
ignoreit.
*#
Hereistextoutsidethemulti-linecomment;
itisvisible.
下面事一些例子说明单行注释和多行注释如何工作。
Thistextisvisible.##Thistextisnot.
Thistextisvisible.
Thistextisvisible.#*Thistext,aspartofamulti-linecomment,
isnotvisible.Thistextisnotvisible;
itisalsopartofthe
multi-linecomment.Thistextstillnotvisible.*#Thistextisoutside
thecomment,soitisvisible.
##Thistextisnotvisible.
还有第三种注释,VTL注释块,可以用来存储诸如文档作者、版本信息等。
#**
ThisisaVTLcommentblockand
maybeusedtostoresuchinformation
asthedocumentauthorandversioning
information:
@author
@version5
7.
引用
VTL中有三种类型的引用:
变量,属性和方法。
作为使用VTL的设计者,你和你的工程师必须在饮用的特定命名上取得一致,以便在你的模板中正确的使用他们。
有关引用的所有参数都处理为字符串对象。
EverythingcomingtoandfromareferenceistreatedasaStringobject.假如有一个对象表示$foo(比如说是整型对象),Velocity将调用其toString()方法来将此对象转换为一个字符串。
7.1.
变量Variables
变量的简略标记是有一个前导"
$"
字符后跟一个VTL标识符(Identifier.)组成。
一个VTL标识符必须以一个字母开始(a..z或A..Z)。
剩下的字符将由以下类型的字符组成:
字母(a..z,A..Z)
数字(0..9)
连字符("
-"
)
下划线("
_"
下面是一些有效的变量引用:
$foo
$mudSlinger
$mud-slinger
$mud_slinger
$mudSlinger1
当VTL引用一个变量时,比如$foo,变量可以从模板的set指令取得值,也可以从
Java代码中取得。
例如,如果Java变量$foo在模板被请求的时候具有值bar,则bar将替换页面中的所有$foo的实例。
或者,如果包含下面的语句:
bar"
紧跟指令后的所有$foo的实例的输出将会一样值。
7.2.
属性
VTL引用的第二种元素是属性,而属性具有独特的格式。
属性的简略标记识前导符$后跟一个VTL标识符,在后跟一个点号("
."
)最后又是一个VTL标识符。
这是一些有效的示例:
$customer.Address
$purchase.Total
请看第一个例子,$customer.Address.。
他有两种意思。
它可以意味着,查询由customer标是的哈希表并按关键字Address返回值。
但是$customer.Address也可能引用一个方法(下述,$customer.Address可能是$customer.getAddress().的缩写。
当一个页面被请求时,Velocity将决定这两种可能到底是哪一个,然后返回相应的值。
7.3.
方法
方法在JAVA代码中定义,并作一些有用的事情,比如运行一个计算器或者作出一个决定。
方法是实际上也是引用,由前导符"
后跟一个VTL标识符,后跟一个VTL方法体(MethodBody)。
VTL方法体由一个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.getPlanets()
$annelid.getDirt()
$album.getPhoto()
我们或许希望方法可以为我们放回属于太阳系的行星的名字,喂养我们的蚯蚓,或者从相册中返回一张照片。
下面只有长的那个标记是可以工作的方法:
$sun.getPlanet(["
Earth"
Mars"
Neptune"
##不能将参数列表传递给$sun.Planets
$sisyphus.pushRock()
##Velocity假定我意思是$sisyphus.getRock()
$book.setTitle("
HomagetoCatalonia"
##不能传递一个参数列表
7.4.
形式引用符FormalReferenceNotation
引用的简略符号如上所述,但是另外还有一种引用的形式符号,示例如下:
${mudSlinger}
${customer.Address}
${purchase.getTotal()}
在大多数情况下,我们将使用引用的简略符号,但在一些情况下,也需要拥戴哦形式引用符以便正确处理。
假定你正在纸片上构件一个句子,将使用$vice作为句子中名词的词根。
我们的目标是允许人们选择词根,然后产生以下两种结果之一:
Jackisapyromaniac."
或者"
Jackisakleptomaniac."
在这种情况下,使用简略符号是不太充分的。
考虑到下面的例子:
Jackisa$vicemaniac.
这里有个不确定性,Velocity假定$vicemaniac,(而不是$vice)是一个你想要使用的标识符。
找不到$vicemaniac的值,他将返回$vicemaniac。
使用形式符号便可解决这个问题:
Jackisa${vice}maniac
现在Velocity知道$vice(而不是$vicemaniac)是一个引用。
形式符号常用在饮用咋模板中和文本直接邻近的地方。
7.5.
安静引用符QuietReferenceNotation
当Velocity遇到一个位定义的引用时,其通常行为是输出这个引用的映像。
比如,假设下面的引用出现在模板中的一部分:
inputtype="
text"
name="
email"
value="
$email"
/>
当表单初次装入时,变量引用$email无值,你宁愿是一个空白域而不是具有值"
使用安静引用符可以绕过Velocity的常规行为,在VTL中不用$email而是用$!
email符号。
所以,上面的例子将会看起来像下面的样子:
$!
现在,当表单初次装入时,$email仍然没有值,但是将输出空字符串而不是"
形式和安静引用符可以一起使用,如下所示:
{email}"
取得语义Gettingliteral
VTL特别的字符,比如$和#,来做这个工作,因此在模板中使用这些自负的时候必须格外小心。
本节讲述$的转义。
1.1.
货币
我们写下句子"
Iboughta4lb.sackofpotatoesatthefarmer'
smarketforonly$2.50!
,这并没有什么问题。
但如前所述,VTL标识符总是以大写或是小写字母开始,所以$2.50在引用中将不能出错。
1.2.
转义有效的VTL引用
问题将会出现,因为Velocity将有一个潜在的冲突。
转义特殊字符是处理VTL模板种特殊字符的最好的办法,者可以用一个反斜线来进行。
foo
\foo
如果Velocity在VTL模板中遇到一个$email引用,他将在上下文中查找相应的值。
这里,输出将是foo,因为$email是定义了的。
如果$email未定义,输出将是$email。
假设$email是定义了的(比如,具有值foo),但是你想输出$email。
可以有几种方法来做这个事情,不是最简单的是使用转义符。
##Thefollowinglinedefines$emailinthistemplate:
#set($email="
foo"
将输出是
注意:
\绑定在$的左边。
从做绑定原则使\\\$email被解释为\\$email。
和上面例子比较下面的例子,这里$email未定义。
输出
注意,Velocity处理定义和未定义的引用是不同的。
下面一个set指令将$foo设为值gibbous.。
gibbous"
$moon=$foo
输出将是$moon=gibbous
--这里$moon作为字面输出,因为他并没有定义。
而gibbous将在$foo的位置输出。
我们也可以转义VTL指令,这将在指令一节祥述。
CaseSubstitution
现在你大致了解了引用,可以在模板中使用它们了。
Velocity采用了很多JAVA原理的优点,模板设计人员会发现非常容易使用。
例如:
$foo.getBar()
##isthesameas
$foo.Bar
$data.getUser("
jon"
)
$data.User("
$data.getRequest().getServerName()
$data.Request.ServerName
${data.Request.ServerName}
这个例子显示了引用的一些其他用法。
Velocity借鉴了Java的自省和组件bean特征,来解决引用名在上下文中作为对象和对象方法的问题。
可以在你的模板的任何地方插入引用和求值。
Velocity,建模在SunMicrosystems定义的BEAN规范之上,是大小写敏感的;
开发者努力捕捉和纠正可能出现的用户错误。
当方法getFoo()在模板中通过$bar.foo引用时,Velocity首先尝试$getfoo。
如果失败,他会再尝试$getFoo。
类似地,当一个模板引用到$bar.Foo,Velocity将尝试$getFoo()先,然后尝试getfoo()。
模板中引用示例变量的问题仍然没有解决。
只有引用等价于JavaBean的getter/setter方法解决了。
(比如$foo.Name解决了到类Foo的getName()示例方法的引用,但不能引用Foo的一个公共实例变量Name)。
指令
因为指令(使用脚本来有效操控JAVA代码的输出)允许页面设计员真正专注于咱点的外观和内容设计,引用允许模板设计员为Web页面产生动态内容。
#set
#set指令用来为引用设置相应的值。
值可以被值派给变量引用或者是属性引用,而且赋值要在括号里括起来。
#set($primate="
monkey"
#set($customer.Behavior=$primate)
赋值的左边必须是一个变量应用或者是属性引用。
右边可以是下面的类型之一:
变量引用
字面字符串
属性引用
方法引用
字面数字
数组列表
这些例子演示了上述的每种类型:
#set($monkey=$bill)##variablereference
#set($monkey.Friend="
monica"
)##stringliteral
#set($monkey.Blame=$whitehouse.Leak)##propertyreference
#set($monkey.Plan=$spindoctor.weave($web))##methodreference
#set($monkey.Number=123)##numberliteral
#set($monkey.Say=["
Not"
$my,"
fault"
])##ArrayList
最后一个例子中,在方括号[..]中定义的项目可以被ArrayList类定义的方法访问。
比如,你可以使用$monkey.Say.get(0)访问上述的第一个元素。
右边也可以是一个简单的算术表达式:
#set($value=$foo+1)
#set($value=$bar-1)
#set($value=$foo*$bar)
#set($value=$foo/$bar)
如果右边是一个属性或方法引用,取值是NULL,他将不会赋值给左边。
通过这种机制将一个存在的引用从上下文中删除是不可能的。
这对Velocity的新手可能会混淆。
#set($result=$query.criteria("
name"
))
Theresultofthefirstqueryis$result
address"
Theresultofthesecondqueryis$result
如果,$query.criteria("
)放回字符串"
bill"
,而$query.criteria("
)返回null,上述VTL将解释为:
Theresultofthefirstqueryisbill
Theresultofthesecondqueryisbill
这往往会给那些想构建#foreach循环来试图通过属性和方法引用来设置一个引用的新手带来困惑,下面马上通过#if指令测试一
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Velocity 初级 入门 指南
![提示](https://static.bdocx.com/images/bang_tan.gif)