Velocity学习笔记

一、jar包

现在越来越多的项目开始使用Velocity作为view,velocity的一些jar包如下:
1、velocity-1.5.jar   包含了veloctiy运行时需要的类
2、velocity-tools-1.4.jar  包含了velocity的视图控制和系统工具类
3、velocity-dvsl-1.0.jar   可选的,封转了dvsl的类
4、commons-collections-xxx.jar  扩展了java.util.map的一些集合类
5、commons-logging-xxx.jar     日志输出类
6、commons-lang-xxx.jar        扩展了java.lang的类
7、commons-digester-xxx.jar     用于处理xml转换到对象的工具类
8、commons-beanutils-xxx.jar    对bean操作的一些类

二、语法

1、变量的定义、赋值与使用规则:赋值的左边必须是一个变量($name)或属性引用($member.Sex),右值为以下六种类型之一:且如果右值为null,则不进行赋值操作,即左值还是保留以前的值;

变量引用:#set($member.Sex=$sex)

字面字符串:#set($username="hzd")

属性引用:#set($color=$ball.Color)

变量引用:#set($member.Age=$ager.sum($age/123/...))

字面数字:#set($money=123456)

数组列表:#set($arr=["not",$m,"xxxx"])

velocity模板中未被定义的变量将被认为是一个字符串:

#set($name="hzd")

$newname=$name,则输出为$newname=hzd
velocity模板中不会将reference解释为对象的实例变量:

如:$foo.Name将被解释为foo对象的getName()方法,而不是foo对象的Name实例变量,

$data.Request.ServerName等同于$data.getRequest.getServerName()

2、遍历循环规则:语法#foreach ...#end,$velocityCount为当前循环的索引(可以通过在velocity配置文件中更改该名称).

循环数组: #foreach($item in ["one","two","three"]) $item #end ,将输出one two three

循环List:#foreach($item in $memberList) $item.name #end,item代表列表中的对象,如果item为值类型(int等),则可以直接使用$item输出值,如果为引用类型(String,User,...),则可以使用$item.name引用实例变量或$item.xxx()调用对象的方法

循环Map:#foreach($key in $memberMap.keySet() ) key:$key;value:$memberMap.get($key) #end

3、条件:使用#if #elseif #else #end 指令可以帮助决定程序的执行流程,如果$foo是boolean,则$foo要为true,否则,$foo不为null

判断对象是否为null的方法:

(1)、#if($member),不为空;#if(!$member),为空;

(2)、#ifnull() 、#ifnotnull():如,ifnull ($foo),要使用这个特性必须在velocity.properties文件中加入:

userdirective = org.apache.velocity.tools.generic.directive.Ifnulluserdirective = org.apache.velocity.tools.generic.directive.Ifnotnull(3)、使用null工具判断:#if($null.isNull($foo))注意这种方式特别有用,尤其你在需要这个判断作为一个判断字句时,比如我要你判断一个集合为null或为空时只能使用这种方式了: $if ($null.isNull($mycoll) || $mycoll.size()==0)#if指令中可以使用的关系和逻辑运算符包括:<,<=,==,>=,>,&&,||,!4、导入指令:作用是导入本地文件到#include或$parse指令定义的地方,出于安全考虑,导入的文件应该放在TEMPLATE_ROOT目录下。#include:导入的文件内容不会被模板引擎解析,一次可以导入多个文件,文件名以逗号分隔,并且通常使用变量引用来代替文件名,如:#include("test.txt","home.txt");#parse:允许导入一个包含VTL的本地文件,并由模板引擎进行解析,例如:#parse("test.vm"),模板引擎会解析'test.vm'中的VTL语句5、宏指令:#macro作用相当于编程语言中的函数,它允许定义一段重复使用的VTL,默认情况下,宏保存在VM_global_library.vm文件中,一个宏可以有0个或多个参数。如:#macro(showList) --定义一个名为showList的且参数个数为0的Velocimacro,可以使用#showList()来进行调用。 #if($treelist) #foreach($item in $treelist)....#end #end #end带参数的宏:同样可以使用#showList($treelist)来调用 #macro (showList $val) #if($val) #foreach($item in $val)...#end #end #end6、停止指令:#stop指令用于停止模板引擎的执行并返回,这对debug很有帮助。 转载:http://blog.163.com/hzd_love/blog/static/131999881201011188161721/

你可能感兴趣的:(velocity)