Velocity学习笔记

什么是 Velocity?


Velocity 是一个基于 java 的模板引擎(template engine). 它可以让视图的设计者在 web 页面中引
用 java 代码中定义的数据对象和命令。从而使 Web designers 和 java 开发者依照 MVC 思想(Model-View-
Controller )开发系统,这意味着 Web designers 只须将精力注用于良好表现力的视图外观设计,而Java
程序员则只要关心着如何写出高效简洁的 java 对象以实现业务逻辑-----Velocity 会将他们组装到一起.
相比传统的 jsp、PHP 等脚本语言,Velocity 彻底的将避免了在视图设计中出现的 java 代码, 从而保证
了 web site 的长期可维护性.
一定要理解,Velocity 是一个 template engine 的意思,它还可以从模板中生成 SQL 语句或其它脚本提
供给 web pages. 它也可以独立使用---做为一个工具类(utility class)用来生成源代码、报表、邮件模
板等---在有需要重复的视图情况下,你应想到使用 Velocity.Apache 站点提供的另外一个框架 Turbine
可以和 Velocity 有效结合以实现 true MVC model.

 

给Velocity中的变量赋值

举个栗子   我们要定义一个变量a    给a赋值为velocity,那么对应的VTL语法应为

#set( $a = "Velocity" )     在VTL中   符号# 所跟的 set 我们用“指示符”这一名词来称呼它(随后介绍更多的指示符), set 指示符使用一个表达式(expression) (包含在一对括号里) –将一个值 value (这里是 Velocity)付给变量 a,(变量名
在左边,值在右边,用=组合起来).  变量是 a ,而符号“$”表明它是一个变量,Velocity 中所有变量以符号”$”开头,所
付的值要用双引号括起, 这个值中还可以再添加 Velocity 变量,如"Hello $name",输出的将是 name
变量所付的值

 

输出第一个velocity页面

<html>
<body>
#set( $foo = "Velocity" )
Hello $foo World!
</body>
<html>

打开上述页面   我们可以看到输出结果为     Hello Velocity World   在此就不贴图了

 

Velocity中的注释

单行注释  ##

多行注释  #*  *#

熟悉开发的童鞋应该都明白使用规则    类似与java中的  //  和/**/    在此不多赘述

 

Velocity的引用

VTL中的引用分为三种  变量引用(variables),属性引用(properties)和命令引用(methods)

* 所有的引用都会以字符串的形式来展现    假设某int类型的值 传入模板引擎中  那么在底层会调用toString()方法来对其进行转换

1.变量引用

简单的说变量以"$" 开头,后面跟一个 VTL 指示符( Identifier).一个合法的 VTL 指示符是以字母开头

以下是正确的 VTL 变量名:
$foo
$mudSlinger
$mud-slinger
$mud_slinger
$mudSlinger1

2.属性引用

VTL 的第二种引用,属性引用,注意”属性”具有相对固定的格式. 它也是以$开头的合法 VTL 指示符,随
后是”变量名字.变量属性”. 如下例:
$customer.Address
$purchase.Total
第一个例子 , $customer.Address.我们设想可能在两种意思 .首先它可能在查找 customer 引用的一个
hashtable 中的以“Address”为 key 关联的一个数据对象.另外他可能表示的是 java 对象 customer 中的
getAddress()这个命令取得的结果 (当然也可写成 $customer.getAddress()). 当客户请求 Web 页面中
Velocity 将根据具体的 customer 类型输出.

3.Methods(命令)

在 java 代码中定义命令是最通常的事, 像执得一组方程式计算成本,读取一个文件等. 命令引用和其它
引用一个也是一个一般的 VTL 声明,看如下的例子可能会更快的理解:
$customer.getAddress()
$purchase.getTotal()
$page.setTitle( "My Home Page" )
$person.setAttributes( ["Strange", "Weird", "Excited"] )


属性引用中的属性查找规则
前己提及,属性可以引用到对象的命令. Velocity 会使用合适的策略选择引用到的命令. 它会根据协定
的命令命令格式查找. 无论属性引用的的名字是否大小写,Velocity 都有固定的查找规则.如在
$customer.address 引用时,查找顺序是:
1.getaddress()
2.getAddress()
3.get("address")
4.isAddress()
对于VTL中大写的属性名 Address 引用,将是:
1.getAddress()
2.getaddress()
3.get("Address")
4.isAddress()

总结起来就是   VTL语法中 引用类型值的查找会优先匹配名称完全一致的,然后是驼峰式起名,之后是获取名称完全一致的字符串

以上均为简洁格式的引用     但是在实际开发中    容易出现变量名混淆的时候,所以一般会将变量名称以大括号包裹,例如获取一个名为kobe的变量   即${kobe}   这样就可以避免与其他名称联系导致名称混淆

注意:模板中引用的必须是通过 java Bean 中的 getter/setter 实现的,而直接的 java 对象的数据域是
不能直接引用的,如$foo.Name 会解析到 class Foo's getName() 的实例方法,但不会解析到 Foos 类的
public Name 这个实例变量

Quiet Reference Notation(静态引用输出)
Velocity 遇到一个不能处理的引用时,一般他会直接输出这个引用$email 的写法,页面上会看到的是
$email,如下例,我们可以在$后面加上一个!号,那么就会输出空白:.

<input type="text" name="email" value="$email"/>
<input type="text" name="email" value="$!email"/>
正式的写法是:.
<input type="text" name="email" value="$!{email}"/>

 

 

Directives(指令符号)
模板设计者使用“引用“生成动态内容, 指令(directives) – 简单的说就是设计者在模板中操作 java对象—让视图设计者全面控制输出内容的格式.
指令总是以 #开头后面紧跟具体的指令符. 就像引用一样(指令的一种),可以将指令理解为”表示这里是一个什么东东).如下例生成一个出错提示:
#if($a==1)true enough#elseno way!#end
这个例子中应使用括号将 else 分开.
#if($a==1)true enough#{else}no way!#end

 

 

Conditionals(条件判断)
1.If / ElseIf / Else
#if 指令用来根据条件在页面中输出内容,, 如下简单的例子::
#if( $foo )
<strong>Velocity!</strong>
#end
根据变量 $foo 计算后是否为 true 决定输出,, 这会有两种情况:: (i) $foo 的是
值是一个 boolean (true/false)
(true/false)型并有一个 true value, 或 (ii) 它是一个非null值
Velocity context 中只能包含 Objects, 因此当我们讲
'boolean'时,, 它就是一个 Boolean (the class).

 

velocity中的== 与java中有所不同   不能用来测试对象是否相等(( 指向同一块内存)) . Velocity 中是否相等仅直接的用来比较 numbers, strings 的值,, or objects 的 toString()结果是否相等.. 如果是不同的对象,, 会调用它们的toString()命令结果来比较..

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值