(1)基本语法
1.#
对于Velocity中的关键字,都是使用#开头的(想象手机上的#键,就是为了开启某功能)。
如#set、#if、#else、#end、#foreach等
实例:
#if($info.imgs)
<img src="$info.imgs" border=0>
#else
<img src="noPhoto.jpg">
#end
2.$
对于变量,都是使用$开头的
如:$name、$msg3.{}
对于需要明确表示的Velocity变量,可以使用{}将变量包含起来
如在页面中,需要有$someoneName这种内容,此时为了让Velocity能够区分,可以使用${someone}Name4.!
如果某个Velocity变量不存在,那么页面中就会显示$xxx的形式,为了避免这种形式,可以在变量名称前加上!
如页面中含有$msg,如果msg有值,将显示msg的值;如果不存在就会显示$msg。这是我们不希望看到的,为了把不存在的变量显示为空白,可以使用$!msg
(2)变量
1.变量定义
#set($name = "hello")
例子:
#set($root = "www")
#set($name = "index")
#set($template = "$root/$name")
$template
结果为www/index
2.变量赋值
$name = "hello"
赋值的左边必须是一个变量,或者是属性的引用。右边可以是:变量引用、字面字符串、属性引用、方法引用、字面数字、数组
#set($name = $bill) ##变量引用
#set($name.pre = "monica") ##字符串
#set($name.last = $address.num) ##属性引用
#set($name.mid = $hotel.find($web)) ##方法引用
#set($name.num = 123) ##数字
#set($name.say = ["yes",$my,"yes"]) ##数组
注意:velocity会将属性解释为属性的get方法,如:
$foo.Bar 等同于 $foo.getBar()
$foo.User("join") 等同于 $foo.getUser("join")
$foo.Request.ServerName 等同于 $foo.getRequest().getServerName()
(2)循环
1.格式与实例
格式为: #foreach( 单个元素名称 in 集合)
....
#end
举例
#set($list = ["yes","no","not sure"])
#foreach( $elem in $list)
$velocityCount this is $elem.</br>
#end
结果为:
1 this is yes.
2 this is no.
3 this is not sure.
注意:$velocityCount是Velocity中定义的方法,用来获得循环次数,直接调用即可
2.根据次数来循环
直接在原来集合位置定义数字范围即可例1-正序:
#foreach( $num in [1..5])
this is $num.</br>
#end
结果为:
this is 1.
this is 2.
this is 3.
this is 4.
this is 5.
例2-逆序:
#foreach( $num in [3..-2])
this is $num.</br>
#end
结果为:
this is 3.
this is 2.
this is 1.
this is 0.
this is -1.
this is -2
3.遍历map
使用entrySet,转化为遍历set即可#foreach($entry in $myMap.entrySet())
$entry.key : $entry.value <br>
#end
结果为:
1 : abc
2 : bbc
3 : cbc
4 : dbc
5 : ebc
(3)条件语句
1.格式
#if(condition)
#elseif(condition)
#else
#end
注意:判空为#if($foo)
2.实例
#if($age>=18)
$age
#else
your age is below 18!
#end
(4)关系和逻辑操作符
1.&&
#if($foo && $bar)
this is and
#end
只有当$foo和$bar全都不为空的时候才会执行
2.||
#if($foo || $bar)
this is or<br>
#else
is null
#end
只要有一个不为空,就会执行
3.!
和java相同,取反
(5)宏
1.定义
#macro(宏的名称 $参数1 $参数2 .....)
语句体(即函数体)
#end
2.调用
#宏的名称 ($参数1 $参数2 .....)
说明:参数之间用空格隔开
3.实例
#macro (tablerows $color $list)
#foreach($i in $list)
<tr><td bgcolor="$color">$i<td/><tr/>
#end
#end
调用:
#set($contents = ["zero","one","two","three"])
#set($color = "red")
<table>
#tablerows($color,$contents)
<table/>
(6)调用实例方法
1.定义
如果context中存储的是类实例,那么就可以调用类方法2.实例
方法 定义:
public class Book {
..
public String show() {
return "show";
}
}
赋值:
context.put("book", new Book());
vm中:
$book.show()
(7)转义字符'\'
如果reference,2个'\'意味着输出一个'\'
#set($mail = "foo")
$mail
\$mail
\\$mail
\\\$mail
结果为:
foo $mail \foo \$mail
(8)内置对象
Velocity内置了一些对象,在vm中可以直接调用,如:$request,$response,$session
(9)注释
1.单行注释##
##this a single line comment
2.多行注释#* *#
#*
this is a muti-line comment
see this example
*#