MyException - 我的异常网
当前位置:我的异常网» 编程 » Velocity 模板引见

Velocity 模板引见

www.MyException.Cn  网友分享于:2013-09-12  浏览:9次
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等

 

文章评论

Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
我的丈夫是个程序员
我的丈夫是个程序员
漫画:程序员的工作
漫画:程序员的工作
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
如何成为一名黑客
如何成为一名黑客
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
程序员必看的十大电影
程序员必看的十大电影
中美印日四国程序员比较
中美印日四国程序员比较
编程语言是女人
编程语言是女人
程序员都该阅读的书
程序员都该阅读的书
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
鲜为人知的编程真相
鲜为人知的编程真相
每天工作4小时的程序员
每天工作4小时的程序员
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
程序员和编码员之间的区别
程序员和编码员之间的区别
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
 程序员的样子
程序员的样子
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
一个程序员的时间管理
一个程序员的时间管理
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
总结2014中国互联网十大段子
总结2014中国互联网十大段子
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
我是如何打败拖延症的
我是如何打败拖延症的
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
那些争议最大的编程观点
那些争议最大的编程观点
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
程序员应该关注的一些事儿
程序员应该关注的一些事儿
10个调试和排错的小建议
10个调试和排错的小建议
为什么程序员都是夜猫子
为什么程序员都是夜猫子
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
Java程序员必看电影
Java程序员必看电影
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有