Velocity 模板介绍

1.Velocity概述 ?

Velocity是一个基于java的模板引擎(template engine:模板引擎的作用就是取得数据并加以处理,最后显示出数据 )。

它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。

2.Velocity的应用领域

Web应用的开发。作为模板产生SQL,XML或代码等。作为其他系统的集成组件使用

3. Velocity工作流程和原理

当 Velocity 应 用 于 application
program或 a servlet,你通常将做
下面的事情
初始化Velocity.
 创建Context对象
添加数据到Context
选择模板
合并模板和数据产生输出页面

3.1Velocity原理举例说明

public static void main(String[] args)
throws Exception {
Velocity.init();
VelocityContextcontext = new
VelocityContext();
context.put("name", “Velocity");
BufferedWriterwriter = new
BufferedWriter(new OutputStreamWriter(
System.out));
Template template =
Velocity.getTemplate("src/velocity/hell
o.vm");
template.merge(context, writer);
writer.flush();
writer.close();
}

 

Velocity 文件(hello.vm)
<html>
<body>
<table>
<tr><td>
hello $name;
</td></tr>
</table>
</html>
这个例子的输出效果为:
Hello Velocity

4. VTL介绍

VTL提供一种简单、容易和干静的方法将
动态内容合并到Web页面。VTL使用引
用(references)将动态内容插入到Web页
面中。变量是一种引用,可以指向Java
代码中的定义内容,或者由Web页面中
的VTL语句来获得值。
例如:#set( $a = "Velocity" )
VTL语句以#开头,并包含指令(set)。变
量以$开头,用引号引起
VTL语法包括:
1,注释
2,引用(References)
3,指令(Directives)

4.1VTL---注释

VTL支持单行注释(以##开始)和多行注
释(包括在#*和*#之间),下面是一个
例子:
## This text is not 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. *#

4.2VTL---引用(References)

VTL有3种类型的引用:变量、属性和方法。
(1)变量
变量的格式:$VTL标识符
VTL标识符以字母开始,由字母、数字、
横划线(-)或下划线(_)组成。
例如下面的例子:
#set( $foo = "gibbous" )
$moon = $foo
输出结果是:$moon = gibbous

(2)属性
属性的格式:$VTL标识符. VTL标识符下面是属性引用的例子:
$customer.Address
$purchase.Total
拿第一例子来说,有两种意思:
返回Hashtable对象customer中键值为Address的值
$customer.getAddress()方法引用的缩写(JavaBean属性的getter方法)至于是哪种情况,Velocity会做决定,返回合适的值。

(3)方法
方法的格式:$VTL标识符(参数列表)下面是方法引用的例子:
$customer.getAddress()
$purchase.getTotal()
$page.setTitle( "My Home Page" )
$person.setAttributes( ["Strange", "Weird", "Excited"] )

4.3VTL---指令(Directives)

详解以下VTL常用指令:
1. #set 
2. #if / #elseif / #else
3. 循环:foreach 
4. #include
5.  #parse
6. #stop
7. #macro

4.3.1VTL---#set(1)

(1)#set
格式:#set( LHS = RHS )
LHS可以是变量引用或属性引用RHS可以是引用、字符串、数字、ArrayList或Map
例如:
#set( $monkey = $bill ) ## variable reference
#set( $monkey.Friend = "monica" ) ## string literal
#set( $monkey.Blame = $whitehouse.Leak )
## property reference
#set( $monkey.Number = 123 ) ##number literal
#set( $monkey.Say = ["Not", $my, "fault"] )
## ArrayList

RHS可以是简单的算术表达式
如果RHS的结果为null,是不会赋值给LHS的
String文字可以使用双引号或单引号括起。两者的主要区别是双引号中的引用会替换成相应的值,而单引号中的引用原样输出 例如:
#set( $value = $foo + 1 ) ##Addition
#set( $directoryRoot = "www" )
#set( $templateName = "index.vm" )
#set($template= $directoryRoot/$templateName" )
$template
输出结果是:www/index.vm

4.3.2VTL---#if#else

(2)#if / #elseif / #else
#if指令在条件成立时,显示#if和#end之间的内容,否则显示#else和#end之间的内容。下面是一个例子:
#if( $foo )
   Velocity!
#end
条件成立有两种情况:
如果$foo是boolean,则$foo要为true;否则,$foo不为null
#if指令中可以使用的关系和逻辑符号包括:<、<=、==、>=、>、 &&(and)、||(or)、!(not)

(3)#foreach
#foreach( $product in $allProducts )
  $product
#end
$allProducts的内容可以是Vector、Hashtable或ArrayList,每次取出一个值赋值给$product

(4)#include
#include指令导入本地文件到#include指令定义的地方。导入的文件内容不会被模板引擎解析。出于安全考虑,导入的文件应该放在TEMPLATE_ROOT目录下。

一次可以导入多个文件,文件名之间用逗号分隔;并且通常使用变量引用来替代文件名。下面是一个例子:
#include("greetings.txt", seasonalstock )

(5)#parse
#parse指令允许导入一个包含VTL的本地文件,并由模板引擎进行解析。例如:
#parse( "parsefoo.vm" )

(6)#stop
#stop指令停止模板引擎的执行并返回。这在Debug时很有用。 

(7)#macro
#macro指令允许定义一段重复使用的VTL模板(称Velocimacros)。Velocimacros可以有0或多个参数。例如:
#macro( tablerows $color $somelist )
#foreach( $something in $somelist )
$something
#end
#end
tablerows的调用:
#set($greatlakes = ["Superior","Erie"] )
#set( $color = "blue" )
#tablerows( $color $greatlakes )

5.Velocity的国际化

Velocity本身支持模版的国际化编码转换,看看Velocity提供的方法:
Public Template getTemplate(String tem String encoding) 另外,在Velocity的tools:MessageTool,提供了变量text包含国际化标签,这样只需要简单的编写标签代码即可,

如:$text.get(‘title’).

6. Velocity对Framework的支持

VelocityTools/VelocityViewServlet对 Servlet 的 支 持 , 使 用VelocityViewServlet 来 代 替Servlet 
Velocity Tools / VelocityStruts对Struts的支持. Third party frameworks对 第 三 方 框 架 的 支 持 , 比如:Spring,Turbine等

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值