Velocity的中文指南(1)-整理
2004-10-12 10:11
183 查看
1. 关于
Velocity 用户指南旨在帮助页面设计者和内容提供者了解Velocity 和其简单而又强大的脚本语言(Velocity Template Language (VTL))。本指南中有很多示例展示了用Velocity来讲动态内容嵌入到网站之中,但是所有的VTL examples 都同演示用于所有的页面和模版。感谢选择Velocity!
2. 什么是Velocity?
Velocity 是一个基于Java的模版引擎。它允许web 页面设计者引用JAVA代码预定义的方法。Web 设计者可以根据MVC模式和JAVA程序员并行工作,这意味着Web设计者可以单独专注于设计良好的站点,而程序员则可单独专注于编写底层代码。Velocity 将Java 代码从web页面中分离出来,使站点在长时间运行后仍然具有很好的可维护性,并提供了一个除JSP和PHP之外的可行的被选方案。Velocity可用来从模板产生web 页面,SQL, PostScript以及其他输出。他也可用于一个独立的程序以产生源代码和报告,或者作为其它系统的一个集成组件。这个项目完成后,Velocity将为Turbine web 应用程序框架提供模板服务。Velocity+Turbine 方案提供的模板服务将允许web 应用按真正的mvc模式进行开发。
3. Velocity 可以做什么?
3.1. Mud Store 示例
假设你是一个专门销售泥浆(MUD)的在线商店的页面设计者。我们称他为"The Online Mud Store"。生意很好。客户订购各种各样的类型和数量的泥浆。他们使用他们的用户名和密码登陆到商店中来,就可以浏览他们的订货和购买其他东西。现在,赤土陶泥正在促销,这是一种很常用的泥巴。一少部分顾客很有规律的购买一种亮红土Bright Red Mud,这也是促销产品,但是不太常用,因此被移到页面的边缘。所有顾客的信息都在数据库中被跟踪,因此有一天问题出现了: 为什么不使用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> |
写在VTL参考文档中的是其他Velocity 元素,他们一起给你很强大的能力和灵活性以创建很好的站点。待你更加了解这些元素,就可以开始释放Velocity的强大动力。
4. Velocity模板语言(VTL): 介绍
Velocity模板语言(VTL)旨在为Web页面结合动态内容提供最容易、简单和简洁的方法。即使有一点或者没有编程经验的页面设计者也可以很快能为页面提供动态内容。VTL 使用引用(references )来将动态内容嵌入web页面,每个变量就是某一个类型的引用。变量实际上是一个可以调用定义在java代码中的内容的引用,或者它可以从页面内的VTL语句得出自身的值。下面是一个例子,说明可以嵌入到HTML文档中的VTL语句。
#set( $a = "Velocity" ) |
# 字符后面紧跟一个指令 set.。set 指令使用一个括在括号内的表达式---一个等式将一个值指派给一个变量。变量在等号的左边而值在等号的右边。
在上面的示例中,变量是 $a 值是Velocity。 这个变量就象其他引用一样,以一个$字符开始。值通常在引号之中,对Velocity来说一般没有类型冲突的问题,因为只有字符串 (基于文本的信息)可以传递给变量。
下面的主要规则可能有助于理解Velocity 是如何工作的:引用以$开头用于取得什么东西,而指令以# 开始用于做什么事情。
在上面的例子中,#set 用于将一个值指派给一个变量。而变量$a 则可以用来在模板中输出"Velocity" 。
5. Hello Velocity World!
一旦一个值被赋给一个变量,便可以在HTML中随处引用它。在下面的示例中,先给变量$foo 赋值然后引用它。<html> <body> #set( $foo = "Velocity" ) Hello $foo World! </body> <html> |
为了使包含VTL 指令的语句具有可读性,我们鼓励每个VTL语句在一个新行开始,虽然并不一定要这样做。 set 将随后深入解释。
6. 注释
可以用注释加入描述性文本,他们并不在模板引擎中输出。注释可以有助于你的记忆或者想其他人解释你的VTL语句正在做什么。## 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. |
#** 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. 引用
VTL中有三种类型的引用:变量,属性和方法。作为使用VTL的设计者,你和你的工程师必须在饮用的特定命名上取得一致,以便在你的模板中正确的使用他们。有关引用的所有参数都处理为字符串对象。Everything coming to and from a reference is treated as a String object. 假如有一个对象表示$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 |
Java 代码中取得。例如,如果Java 变量 $foo 在模板被请求的时候具有值bar ,则bar 将替换页面中的所有$foo 的实例。或者,如果包含下面的语句:
#set( $foo = "bar" ) |
7.2. 属性
VTL引用的第二种元素是属性,而属性具有独特的格式。属性的简略标记识前导符$ 后跟一个VTL 标识符,在后跟一个点号(".")最后又是一个VTL 标识符。这是一些有效的示例:$customer.Address $purchase.Total |
7.3. 方法
方法在JAVA代码中定义,并作一些有用的事情,比如运行一个计算器或者作出一个决定。方法是实际上也是引用,由前导符"$"后跟一个VTL 标识符,后跟一个VTL 方法体(Method Body)。 VTL 方法体由一个VTL 标识符后跟一个左括号,再跟可选的参数列表,最后是右括号。下面是一些有效的方法示例:$customer.getAddress() $purchase.getTotal() $page.setTitle( "My Home Page" ) $person.setAttributes( ["Strange", "Weird", "Excited"] ) |
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. |
Jack is a ${vice}maniac |
7.5. 安静引用符Quiet Reference Notation
当 Velocity 遇到一个位定义的引用时,其通常行为是输出这个引用的映像。比如,假设下面的引用出现在模板中的一部分:<input type="text" name="email" value="$email"/> |
<input type="text" name="email" value="$!email"/> |
形式和安静引用符可以一起使用,如下所示:
<input type="text" name="email" value="$!{email}"/> |
相关文章推荐
- Velocity的中文指南(2)-整理
- Velocity的中文指南(3)-整理
- Velocity的中文指南(4)-整理
- Velocity的中文指南(5)-整理
- Velocity的中文指南(1)
- velocity用户指南 超全面的中文教材
- velocity用户指南(中文)
- velocity用户指南 超全面的中文教材 分享
- GreenSQL中文安装指南
- 【Scikit-Learn 中文文档】特征选择 - 监督学习 - 用户指南 | ApacheCN
- 【Scikit-Learn 中文文档】无监督降维 - 数据集转换 - 用户指南 | ApacheCN
- jQuery中文入门指南,翻译加实例,jQuery的起点教程
- 【Scikit-Learn 中文文档】集成方法 - 监督学习 - 用户指南 | ApacheCN
- 【Scikit-Learn 中文文档】双聚类 - 无监督学习 - 用户指南 | ApacheCN
- 【Scikit-Learn 中文文档】交叉验证 - 模型选择和评估 - 用户指南 | ApacheCN
- 【Scikit-Learn 中文文档】朴素贝叶斯 - 监督学习 - 用户指南 | ApacheCN
- 【Scikit-Learn 中文文档】分解成分中的信号(矩阵分解问题) - 无监督学习 - 用户指南 | ApacheCN
- 【Scikit-Learn 中文文档】双聚类 - 无监督学习 - 用户指南 | ApacheCN
- 【Scikit-Learn 中文文档】双聚类 - 无监督学习 - 用户指南 | ApacheCN