velocity
velocity三种reference
变量:对java对象的一种字符串化表示,返回值调用了java的toString()方法的结果。
方法:调用的是对象的某个方法。该方法必须是public的。返回值也是toString(),方法的參数也必须为String的。
属性:除了訪问java的类属性外,等价于get..()方法。
基本符号
1、“#”来标识velocity的脚本语句。
2、“$”来标识一个对象(或者变量)。
3、“{}”用来标识velocity变量。
4、“!”用来强制把不存在的变量显示为空白。
5、用双引號还是单引號表示,默认“”,能够在stringliterals.interpolate=false改变默认处理方式
基本的语法
1、 变量
(1) 变量定义
#($name="hello")
#($templateName = "index.vm")
#set($template = "$directoryRoot/$templateName")
#template
(2)变量规范
${name},也能够写成$name
但普通情况下使用${name}
注意:当引用属性的时候不能加{}
(3)变量赋值
$name ="hello"
左側:
为变量或者属性的引用。
右側:
变量引用、字面字符串、属性引用、方法引用、字面数字、数组列表。
#set($monkey = $bill) ##变量引用
#set( $monkey.Friend = "monica" ) ## 字符串引用
#set($monkey.Blame = $spindoctory.weave($web) ## 方法引用
#set($monkey.Number = 123) ## 数字引用
#set($monkey.Say = ["Not",$my,"fault"] ##数组列表
ps:
1、右值是null。则左側不会被赋值。会保留原来的值。
2、velocity 模板中未被定义的将被觉得是一个字符串。
#set($foo ="gibbous")
$moon = $foo
输出结果为$moon=gibbous
3、velocity模板中不会解释为对象的实例变量。
比如
$foo.getBar() 等同于$foo.Bar;
$data.getUser("jon") 等同于 $data.User("jon");
data.getRequest().getServerName()等同于$data.Request.ServerName等同于$(data.Request.ServerName)
2、循环
#foreach($element in $list)
This is $element
$velocityCount
#end
比如:
#set($list=["pine","oak","maple"])
#foreach($element in $list)
$velocityCount
This is $element.<br>
#end
输出结果为:
$list 能够为Vector、Hashtable、Array。分配给$element 的值是一个java对象,而且能够通过变量被引用。
比如
#foreach($key in $list.keySet)
Key: $key--->value: $list.get($key) <br>
#end
Velocity 还提供了循环次数的方法,$velocityCouont变量的名字是Velocity默认的名字。表示循环到第几次了。
比如
#foreach($foo in [1,2,3,4,5])
$foo
#end
<br>
#foreach($bar in [2,1,0,-1,-2])
$bar
#end
<br>
#set($arr=[0,1])
#foreach($i in $arr)
$i
#end
输出结果例如以下:
3、条件语句
#if(condition)
#elseif(condition)
#else
#end
比如:
#set($arr=["jiayou","jiayou2","jiayou3"])
#foreach($element in $arr )
#if($velocityCount==1)
<div>jiayou</div>
#elseif($velocityCount==2)
<div>jiayou2</div>
#else
<div>jiayou3</div>
#end
#end
输出结果:
4、语句嵌套
#foreach($element in $list)
#foreach($element in $list)
this is $element .$velocity <br>inner<br>
#end
this is $element.$velocity <br>out<br>
#end
5、凝视
单行凝视:##this is single
多行凝视:#* .........*#
文档格式:#**.............*#
6、关系和逻辑操作符
&& == || !
#if($foo && $bar)
<strong> This AND that</strong>
#end
7、velocity中的宏
Velocity中的宏我们能够理解为函数。
①宏的定义
#macro(宏的名称 $參数1 $參数2 …)
语句体(即函数体)
#end
②宏的调用
#宏的名称($參数1 $參数2 …)
说明:參数之间用空格隔开。
8、#stop
停止运行模板引擎并返回,应用于debug非常有帮助。
9、$include和#parse
#include和#parse的作用都是引入本地文件。为了安全,被进入的文件仅仅能在Template_root文件夹下。
这两个引入差别:
1)#include能够引入多个文件。
比如:#include("one.gif","two.txt","three.html")
#parse仅仅能引入指定的单个对象。比如:#parse("layout/index.vm")
2)#include引入的文件内容不会被velocity模板引擎解析。
#parse引入的文件内容,将解析当中的velocity并交给模板。相当于把引入的文件内容copy到文件里。
3)#parse是能够递归调用的。
比如:
调用者
dofoo.vm中代码:
count down.<br>
#set($count= 8)
#parse(parsefoo.vm)
<br>all done with diao yong parsefoo.vm.
parsefoo.vm中代码:
$count
$set($count = $count - 1)
#if($count>0)<br>
#parse("parsefoo.vm") ##自己调用自己
#else
<br>递归调用结束
#end
输出结果:
注:
使用#parse来嵌套还有一个vm页面时,变量共享问题,如:
a.vm 中嵌套了b.vm
a.vm中使用了变量$param;
b.vm里可直接使用$param.
但当中一个定义了,则使用它自定义的那个同名变量。
10、转义字符
当变量被定义的时候。两个\\代表一个\,假设未被定义,则依照原样输出。
比如:
11、内置对象
velocity内置了一些对象,在vm中能够直接调用。比如
$request、$response、$session,使用$msg内的消息工具訪问struts的国际化资源。达到简便实现国际化方法。
12、数组訪问
数组要改成list等其它类容器方式来包装。