用户和开发人员参考文档
http://velocity.apache.org/engine/releases/velocity-1.7/developer-guide.html
注释
1.行级注释##
2.多行注释#* *#
变量定义
使用$开头的字符串是变量定义,例如$var1, $var2,
赋值
使用#set为变量赋值,例如
#set($var1 = 100) #set($str="foobar") #set($var2 = $var1) $var2 ##显示100
1. #set指令需要使用小括号将赋值语句括起来
2. #set语句后面不要加;,否则;将解析到页面上
3. #set是行级指令,不需要使用#end
{}含义
假如有一个Velocity变量,例如$abc, 那么$abcdef这种串如何表达它的含义,即变量$abc的值连接def,默认Velocity会认为$abcdef是一个变量,此时需要使用${abc}def来表达它的含义
算术运算
1. 运算符: + - * / %
2. 使用#set语句执行算术运算操作
#set($a = 5) #set($b = 4) #set($c = 3) #set($d = 2) #set($e = 7) #set($a= $a+$b*$c/$d - 6%$e) ##5+4*3/2-6%7=5 "Result:" $a
关系运算
> >= == <= <
逻辑运算
&& || !
条件判断
#set($var1 = 20) #if($va1 >= 100) $var1 is greater than or equals 100 #elseif($va1 >= 50) $var1 is betwen [50, 100) #elseif($var1 >= 0) $var1 is between [0,50) #else $var1 is negative #end
1. #if是条件判断语句,#if/#else, #if/#elseif/#else 是if/else条件判断语句
2. if/elseif使用括号括起来
3. #if是块级指令,因此使用#end显示指定块级指令的结束
循环语句
#set($array = [1, "Two", 3,"Four"]) #foreach($i in $array) <li> The $velocityCount element in the array is $i </li> #end
1. 数组定义类似于Javascript,用中括号[]括起来,以逗号分隔
2. $velocityCount是Velocity内置属性,用于指示当前循环的次数,从1开始计算,即第一次循环,它的值是1
3. #foreach in语句用于表示循环,
4. #foreach语句也是块级语句,需要使用#end来指明语句的结束
$!的含义
$!var1的含义是如果变量var1存在,则取其值,否则取空,即不显示,它等价于如下语句
#set($var1 = 100) $!var2 ##show nothing $!var1 ##show 100 #if($var1) $var1 #end #if($var2) #var2 #end
#include指令
#include可以在vm中指定静态文件,这跟JSP的include标签的含义一样,例如
#include("staticHTML.html"),这个staticHTML.html
#include指令默认从classpath开始寻找文件??目前不确定!
Velocity资源加载器
在#include指令一节说到了include的文件到什么位置进行加载,这个位置与velocity资源加载的配置有关,常用的加载位置包括webapp资源加载器,文件路径资源加载器,还有类路径记载器,在velocity.properties中,添加如下的配置项表示webapp资源加载器,项目对于web项目的根开始算起
resource.loader=webapp webapp.resource.loader.class=org.apache.velocity.tools.view.WebappResourceLoader #relative to the web context, under the same parent directory with WEB-INF #that is, vm and WEB-INF are sibling folders webapp.resource.loader.path=/vm
其中的webapp是资源加载器的名称,/vm是web应用的根下面的vm目录,也就是说,vm目录和WEB-INF目录是平级的