以文本方式查看主题 - 中文XML论坛 - 专业的XML技术讨论区 (http://bbs.xml.org.cn/index.asp) -- 『 Java/Eclipse 』 (http://bbs.xml.org.cn/list.asp?boardid=41) ---- Velocity的中文指南-整理 (http://bbs.xml.org.cn/dispbbs.asp?boardid=41&rootid=&id=15352) |
-- 作者:npuhetao -- 发布时间:3/10/2005 3:40:00 PM -- Velocity的中文指南-整理 (1) Velocity的中文指南(1)-整理 -------------------------------------------------------------------------------- 发布时间: 2005-1-1 18:40:02 被阅览数: 611 次 1. 关于 Velocity 用户指南旨在帮助页面设计者和内容提供者了解Velocity 和其简单而又强大的脚本语言(Velocity Template Language (VTL))。本指南中有很多示例展示了用Velocity来讲动态内容嵌入到网站之中,但是所有的VTL examples 都同演示用于所有的页面和模版。 感谢选择Velocity!
2. 什么是Velocity? Velocity可用来从模板产生web 页面,SQL, PostScript以及其他输出。他也可用于一个独立的程序以产生源代码和报告,或者作为其它系统的一个集成组件。这个项目完成后,Velocity将为Turbine web 应用程序框架提供模板服务。Velocity+Turbine 方案提供的模板服务将允许web 应用按真正的mvc模式进行开发。
3. Velocity 可以做什么? Velocity 使针对访问者个性的WEB页面客户化(个性化)非常容易。作为一个在线泥巴商店的站点设计者,以想在客户以登陆进展点后就看到它们想看的页面。 你遇到你公司的软件工程师,每个人都认为$customer 将保持当前登陆进入的客户信息,而$mudsOnSpecial 将士当前所有促销的泥巴。$flogger 对象包含有助于促销的方法。对于当前的任务,让我们仅关注这三个问题。记住,你不需要担心软件工程师如何从数据库中取得顾客信息,但你必须知道他们可以。这样可以使你专注于你的工作而软件工程师则忙于他们自己的工作。 你可以在你的页面中嵌入如下的VTL语句: <HTML> <BODY> Hello $customer.Name! <table> #foreach( $mud in $mudsOnSpecial ) #if ( $customer.hasPurchased($mud) ) <tr> <td> $flogger.getPromo( $mud ) </td> </tr> #end #end </table>
foreach 语句的细节将进一步细说,但重要的是这个短小的脚本居然可以在你的站点上运行。当有一个倾向于亮红土的顾客登陆进来时,亮红土正在促销,这就是这个顾客所看到的,并且促销显示非常显著。如果另外一个长期购买赤陶土的顾客登陆进来,赤陶土促销的提示信息则应该在前面中间位置。Velocity是非常灵活的,受限的只是你的创造力。 写在VTL参考文档中的是其他Velocity 元素,他们一起给你很强大的能力和灵活性以创建很好的站点。待你更加了解这些元素,就可以开始释放Velocity的强大动力。 4. Velocity模板语言(VTL): 介绍 VTL 使用引用(references )来将动态内容嵌入web页面,每个变量就是某一个类型的引用。变量实际上是一个可以调用定义在java代码中的内容的引用,或者它可以从页面内的VTL语句得出自身的值。下面是一个例子,说明可以嵌入到HTML文档中的VTL语句。
#set( $a = "Velocity" )
这个VTL语句,就像所有的VTL语句一样,以 # 字符开始,并跟着一个指令set。 当一个在线访问这请求页面时, Velocity 模伴引擎在页面内搜索所有# 字符,然后决定是哪一个标记了VTL语句的开始,哪个标记不需要VTL做什么动作。
# 字符后面紧跟一个指令 set.。set 指令使用一个括在括号内的表达式---一个等式将一个值指派给一个变量。变量在等号的左边而值在等号的右边。
在上面的示例中,变量是 $a 值是Velocity。 这个变量就象其他引用一样,以一个$字符开始。值通常在引号之中,对Velocity来说一般没有类型冲突的问题,因为只有字符串 (基于文本的信息)可以传递给变量。
下面的主要规则可能有助于理解Velocity 是如何工作的:引用以$开头用于取得什么东西,而指令以# 开始用于做什么事情。 在上面的例子中,#set 用于将一个值指派给一个变量。而变量$a 则可以用来在模板中输出"Velocity" 。 5. Hello Velocity World! <html> <body> #set( $foo = "Velocity" ) Hello $foo World! </body> <html>
这个页面的结果是输出"Hello Velocity World!"。 为了使包含VTL 指令的语句具有可读性,我们鼓励每个VTL语句在一个新行开始,虽然并不一定要这样做。 set 将随后深入解释。
6. 注释 ## This is a single line comment.
单行注释以## 开始,并在本行结束。如果需要加入多行注释,并不需要加入很多的单行注释。多行注释,以#* 开始并以*#结束可以处理这种情况。 This is text that is outside the multi-line comment. Online visitors can see it.
#* Thus begins a multi-line comment. Online visitors won't see this text because the Velocity Templating Engine will ignore it. *#
Here is text outside the multi-line comment; it is visible.
下面事一些例子说明单行注释和多行注释如何工作。 This text is visible. ## This text is not. This text is visible. This text is visible. #* This text, as part of a multi-line comment, is not visible. This text is not visible; it is also part of the multi-line comment. This text still not visible. *# This text is outside the comment, so it is visible. ## This text is not visible.
还有第三种注释, VTL 注释块,可以用来存储诸如文档作者、版本信息等。
#** This is a VTL comment block and may be used to store such information as the document author and versioning information: @author @version 5 *#
7. 引用
有关引用的所有参数都处理为字符串对象。Everything coming to and from a reference is treated as a String object. 假如有一个对象表示$foo (比如说是整型对象),Velocity 将调用其toString() 方法来将此对象转换为一个字符串。 7.1. 变量Variables 字母 (a .. z, A .. Z) 数字 (0 .. 9) 连字符("-") 下划线 ("_") 下面是一些有效的变量引用: $foo $mudSlinger $mud-slinger $mud_slinger $mudSlinger1
当VTL 引用一个变量时,比如$foo,变量可以从模板的set 指令取得值,也可以从 Java 代码中取得。例如,如果Java 变量 $foo 在模板被请求的时候具有值bar ,则bar 将替换页面中的所有$foo 的实例。或者,如果包含下面的语句: #set( $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. 方法
$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() 完全一样的效果。属性和方法的主要不同点是方法中可以添加参数列表。 简略标记可以用在下面的方法中: sun.getPlanets() $annelid.getDirt() $album.getPhoto()
我们或许希望方法可以为我们放回属于太阳系的行星的名字,喂养我们的蚯蚓,或者从相册中返回一张照片。下面只有长的那个标记是可以工作的方法: $sun.getPlanet( ["Earth", "Mars", "Neptune"] ) ## 不能将参数列表传递给$sun.Planets
$sisyphus.pushRock() ## Velocity 假定我意思是$sisyphus.getRock()
$book.setTitle( "Homage to Catalonia" ) ## 不能传递一个参数列表 7.4. 形式引用符Formal Reference Notation ${mudSlinger} ${customer.Address} ${purchase.getTotal()}
在大多数情况下,我们将使用引用的简略符号,但在一些情况下,也需要拥戴哦形式引用符以便正确处理。 假定你正在纸片上构件一个句子,将使用$vice 作为句子中名词的词根。我们的目标是允许人们选择词根,然后产生以下两种结果之一: "Jack is a pyromaniac." 或者 "Jack is a kleptomaniac."。 在这种情况下,使用简略符号是不太充分的。考虑到下面的例子: Jack is a $vicemaniac.
这里有个不确定性, Velocity 假定 $vicemaniac,(而不是 $vice) 是一个你想要使用的标识符。 找不到$vicemaniac的值,他将返回$vicemaniac。使用形式符号便可解决这个问题: Jack is a ${vice}maniac 现在Velocity 知道 $vice(而不是 $vicemaniac) 是一个引用。形式符号常用在饮用咋模板中和文本直接邻近的地方。
7.5. 安静引用符Quiet Reference Notation <input type="text" name="email" value="$email"/> 当表单初次装入时,变量引用$email 无值,你宁愿是一个空白域而不是具有值"$email"。使用安静引用符可以绕过Velocity的常规行为,在VTL中不用$email 而是用$!email 符号。 所以,上面的例子将会看起来像下面的样子: <input type="text" name="email" value="$!email"/> 现在,当表单初次装入时, $email 仍然没有值,但是将输出空字符串而不是"$email"。
形式和安静引用符可以一起使用,如下所示: <input type="text" name="email" value="$!{email}"/> |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
61.523ms |