`
takkymj
  • 浏览: 124175 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

velocity入门

阅读更多
Velocity学习笔记1——Velocity是什么 收藏
      Velocity是一个基于Java的模版引擎。它允许web页面设计者引用Java代码中定义的方法。web设计者能够和Java程序员并行的工作来开发MVC模式的web站点,这意味着web页面设计者能够只关注创建设计良好的站点,而程序员能够只关注编写顶尖的代码。Velocity将Java代码从web页面中分离出来,使得web站点在长期的运行中具有更好的可维护性。
        Velocity能够用来创建web页面,SQL,PostScript和其他能够由模版输出的代码。它能够单独使用来生成源代码或者报告,也可以和其他的系统集成。



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/afrag/archive/2006/05/23/752037.aspx



Velocity学习笔记2——Velocity能够做什么 收藏
            一个泥土商店的例子:
            假设你是一个页面设计人员,为一个专门卖泥土的网上商店工作。我们把这个商店取名叫“网上泥土店”。这个店的业务是兴旺的。不同的顾客会购买不同的种类和数量的泥土。他们使用用户名和密码登录你的网站,这允许他们浏览他们自己的订单或者购买更多的泥土。 现在,有Terracotta土出售,而且这种泥土很受欢迎。而你的少数用户则会有规律的购买Bright Red泥土。这种泥土虽然不象Terracotta泥土那样受欢迎,而且通常位于你的web页面的边缘,但是也有出售。每个用户的信息都被记录在数据库中。 有一天,事情来了。为什么不用Velocity来达到对每个用户最感兴趣的泥土做一个特殊的处理的目的呢。
            作为一个网上泥土店的网站设计人员,你希望用户登录你的网站之后能够看到一些客户化的信息。Velocity使得对你的web页面根据登录的用户做客户化的处理很容易。
            和软件工程师沟通之后,达成的协议:
1.当前登录用户的信息会放在一个叫做$customer的引用中。
2.引用$mudsOnSpecial包含所有当作在销售的泥土的信息。
3.引用$flogger会包含一个可以获取帮助信息的方法。
            现在,是我们实现任务的时候了。记住,我们不用担心这软件工程师如何从数据库中抽取数据。我们只需要关注这3个引用。现在,让我们进行自己的工作。
            你可以在web页面中包含以下的VTL语句(VTL:Velocity Template Language, Velocity模版语言;这个会在以后做详细的介绍)。
<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会在后面做深入的介绍,现在我们需要关心的是这一段代码在web页面上有什么影响。
      当一个对Bright Red泥土感兴趣的顾客登录的时候,并且Bright Red泥土还在销售,那么Bright Red泥土的信息就会显示出来。当另外一个长期定购Terracotta泥土的顾客登录的时候,Terracotta泥土的信息就会显示出来(可能是一个打折的信息)。
      Velocity的非常灵活的,唯一的限制是你的创造力。(王婆卖瓜,自卖自夸哈)

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/afrag/archive/2006/05/24/752476.aspx



Velocity学习笔记3——Velocity 模板语言(VTL: Velocity Template Language)简介 收藏
VTL是为了提供一种最简单的、最容易的、最简洁的方法来展现web页面中的动态内容。即使是一个只有很少的编程经验、甚至是没有编程经验的页面开发人员也能够很快掌握VTL来展现页面的动态内容。
VTL使用reference(引用)来包含web站点中的动态内容, 变量就是reference的一种。变量是一种引用,它能够指向一个Java代码中定义的对象,也可以从页面本身的VTL语句中获取值。下面就是一个可以包含在HTML文档中的VTL语句的例子:
#set ( $a = “Velocity”)
这个VTL语句和所有的VTL语句一样,以#字符开通,并包含一个directive(指示):set。 当一个在线的访问者访问这个web页面的时候,Velocity模板引擎(Velocity Template Engine)会搜索整个web页面来查找所有的#字符,然后决定哪些是表明一个VTL语句的开始,哪些是和VTL无关的#字符。
在上面的VTL语句中,#字符后面跟着一个directive(指示):set。 set指示使用一个表达式(用括号括起来的部分)——一个将值赋给变量的表达式。变量写在等号左边,值写在等号右边。
在上面的例子中,变量是$a, 值是Velocity。 变量是一种reference(引用),这个变量和所有的引用一样以$字符开头。值总是用引号括起来。在Velocity中没有数据类型的混乱,因为只有字符串可以传递给变量。
下面的规则可能有助于更好的理解Velocity的工作:reference(引用)总是以$开头,用来获取一些东西。 directive(指示)总是以#开头,用来做一些事情。
在上面的例子中,#set用来给变量赋值。变量$a可以在模板中使用以输出”Velocity”。
以后会对VTL做一个比较详细的介绍。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/afrag/archive/2006/05/31/765204.aspx








Velocity学习笔记5——VTL模板中的注释 收藏
注释允许在模板中包含描述文字,而这些文字不会被放置到模板引擎的输出中。注释是一种有效的提醒自己和向别人解释你的VTL语句要做什么事情的方法。你也可以把注释用来做其他你认为有用的用途。下面就是一个注释的例子。
## This is a single line comment.
一个单行的注释以##开始,直到行尾才结束。如果你要写很多行的注释,那么不用使用多各单行注释,VTL还提供了多行注释。多行注释以#*开始,以*#结束。下面是一个多行注释的例子。
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.

在使用Velocity引擎解析上面的模板时,输出的结果是:

This is text that is outside the multi-line comment.
Online visitors can see 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.
用Velocity引擎解析上面的模板,输出的结果是:

This text is visible. This text is visible.
This text is visible. This text is outside
the comment, so it is visible.

在VTL中还有第三种注释:VTL注释块。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
*#


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/afrag/archive/2006/05/31/765322.aspx








Velocity学习笔记6——VTL中的引用 收藏

引用(Reference)
在VTL中有3种类型的引用:变量、属性和方法。作为一个使用VTL的设计者,必须和同伴就引用的命名达成一致的意见,才能够在模板种正确的使用它。所有来自于引用的东西都会被作为字符串对待。如果一个引用指向一个对象而不是一个字符串,velocity会调用该对象的toString()方法来将该对象解决这个问题。(我的理解:由于velocity引擎会将模板文件输出成另外的一个文本,因此velocity引擎会试图将所有的引用都转换成string)

变量(Variable)
变量的速记符号由一个$开头,后面是一个VTL的表示符。一个VTL的标识符必须以一个字母开始(a-z,A-Z),其他的部分必须是以下的字符:
字母(a-z,A-Z),
数字(0-9)
连字符(-)
下划线(_)
下面就是一些有效的变量:
$foo
$mudSlinger
$mud-slinger
$mud_slinger
$mudSlinger1

当VTL引用是一个变量的时候,例如$foo,这个变量的值可以从模板中的一个set指示(directive)中获取,也可以从Java code中获取。例如,如果在java中将变量$foo的值设置为了”bar”,那么模板中的所有的$foo都会用bar来替代。另外一种方法是使用set指示,例如:
#set( $foo = "pub" )
所有以后出现的$foo都会被pub替代。


属性
VTL引用的第二种类型是属性(property)。引用由特殊的格式。属性的速记符号是以$开始后面跟一个VTL的标识符,再跟一个点(.)符号,再跟一个VTL标识符。下面是VTL中引用的例子:

$customer.Address
$purchase.Total






在第一个例子中,$customer.Address,可以有两种含义。第一种是:在customer指向的hashtable中寻找和key值为Address的值。第二种是:是一个方法调用;$customer.Address可能是$customer.getAddress()的缩写。Velocity引擎会判断实际情况是这两种情况中的拿一种,并且返回恰当的值。

Methods
A method is defined in the Java code and is capable of doing something useful, like running a calculation or arriving at a decision. Methods are references that consist of a leading "$" character followed a VTL Identifier, followed by a VTL Method Body. A VTL Method Body consists of a VTL Identifier followed by an left parenthesis character ("("), followed by an optional parameter list, followed by right parenthesis character (")"). These are examples of valid method references in the VTL:
方法(Method)
方法是Java代码中定义的并且能够做某些事情,例如进行计算或做某些决定。VTL中的方法引用是以$开始,跟着是一个VTL标识符跟着是一个点符号(.),再跟着是一个VTL的方法体。一个VTL的方法体是一个VTL标识符接着是一个左括号”(“,然后是操作参数列表,然后是右括号”)”。下面是一些有效的VTL方法引用的例子:
$customer.getAddress()
$purchase.getTotal()
$page.setTitle( "My Home Page" )
$person.setAttributes( ["Strange", "Weird", "Excited"] )
上面的例子中的前两个例子:$customer.getAddress() 和$purchase.getTotal()与属性那一节中的例子很相似。实际上,$customer.Address也可以看成是$customer.getAddress()的简写形式。这两种方式的不同之处是再方法中,可以指定参数的列表。下面的方法就可以用简写形式:
$sun.getPlanets()
$annelid.getDirt()
$album.getPhoto()
而下面的方法不能用简写形式
$sun.getPlanet( ["Earth", "Mars", "Neptune"] )
## 简写形式不能够传递参数

$sisyphus.pushRock()
## Velocity会将$sisyphus.Rock认为是$sisyphus.getRock()

$book.setTitle( "Homage to Catalonia" )
## 简写形式不能够传递参数


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/afrag/archive/2006/06/01/767679.aspx








Velocity学习笔记7——引用的不同形式 收藏
正式的引用符号:
在以前的例子中使用的都是引用的简写形式,引用还有一种正式的形式,如下面的例子所示:
${mudSlinger}
${customer.Address}
${purchase.getTotal()}
几乎在所有的情况下都可以使用引用的简写形式,但是有些时候还是必须使用正式形式。
假设你创建了一个句子,其中包含引用$vice作为一个名词基本词根,目的是允许用户选择这个基本词来创建下面的语句中的一个”Jack is a pyromaniac”或者”Jacd is a kleptomaniac”。这里红色的地方是$vice引用将要取代的部分。在这里使用简写形式是不恰当的。如果写成简写形式,就是下面的样子:
Jack is a $vicemaniac.
这样就很不明确, Velocity引擎会认为$vicemaniac是你要使用的引用,而不是$vice。使用正式形式就会避免这种情况:
Jack is a ${vice}maniac.
Now Velocity knows that $vice, not $vicemaniac, is the reference. Formal notation is often useful when references are directly adjacent to text in a template.
现在Velocity引擎就知道你使用的引用是$vice,而不是$vicemaniac。正式形式通常用在模板中引用后面直接跟文本的情况下。

安静的引用形式(Quiet Reference Notation)
当Velocity引擎遇到一个没有定义的引用的时候,它通常的做法是直接将这个引用输出。例如下面的句子出现在一个VTL模板中:
<input type="text" name="email" value="$email"/>
如果当这段代码初始化的时候,变量$email还没有赋值,那么Velocity引擎会输出:
<input type="text" name="email" value="$email"/>
也就是说对$email没有任何处理,直接原样输出。
使用安静的引用形式,可以避免Velocity引擎的这种通常的处理方法。安静的引用形式是:$!eamil。这样上面的例子就变成了:
<input type="text" name="email" value="$!email"/>
现在,当这段代码初始化的时候,如果$email还是没有值,那么输出时就会用一个空字符串来代替$email,这时上面的例子的输出就是:
input type="text" name="email" value=""/>
正式形式和安静形式可以一起使用,如下:
<input type="text" name="email" value="$!{email}"/>


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/afrag/archive/2006/06/02/769973.aspx










Velocity学习笔记8——逃逸符 收藏
VTL使用特殊的字符来完成工作,例如$和#, 因此如果在你的模板中要使用这样的字符,就需要格外的小心。这里讲解了怎样使用$字符。

货币:
$字符在日常生活中通常用作货币字符。下面的句子在VTL中不会有问题:”I bought a sack of potatoes at the farmer’s market for only $2.50!”。在以前曾经提到过,VTL的标识符是以字母开始的,因此$2.50不会被认为是一个引用。

逃逸符:
当你的Volicty模板中使用了VTL使用的特殊的字符,会引起Velocity引擎的混淆的时候,就需要使用逃逸符。VTL的逃逸符是’\’。
例如:
#set ($email = “foo” )
$email
当Velocity在你的模板中遇到$email引用的时候,就会搜寻相应的值。在这里输出将会是foo,因为$email被设置为foo。
如果你想要输出字符串$email,该怎么办呢?这个时候就要使用逃逸符了。如下:
## The following line defines $email in this template:
#set( $email = "foo" )
$email
\$email
\\$email
\\\$email
输出为:
foo
$email
\foo
\$email

如果 $email没有设置值,如下:
$email
\$email
\\$email
\\\$email
输出则是:
$email
\$email
\\$email
\\\$email
注意,Velocity处理定义了值的引用和没有定义值的引用的方式是不一样的。例如:
#set( $foo = "gibbous" )
$moon = $foo
输出将是:$moon = gibbous,这里$moon作为文字输出,因为它没有被定义值;而$foo将输出gibbous,因为它被定义了值。
VTL的指示(directive)也可以逃逸。这个我们将在讲指示的章节详细讨论。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/afrag/archive/2006/06/09/782995.aspx
分享到:
评论
1 楼 lujq1992 2014-09-19  
引用
[flash=200,200][url][img]
[/img][/url][/flash]
[img][/img]

相关推荐

Global site tag (gtag.js) - Google Analytics