velocity是一个java的页面模板框架,Apache基金会出品,自从2010年出了1.7版本以后,就没有出新版本了,svn里面有一个2.0的分支,可是下载下来根本没有办法编译过,会有各类奇怪的maven依赖问题,据传已经把人调过去开发freemarker了。java
其余的不说了,不更新,想好一点就是足够稳定了,不须要更新了。app
下面是我在自学的时候整理的部分语法,贴在这里,你们来指正一下。:)框架
##关键字maven
全部的关键字都是以 # 开头的,而全部的变量则是以 $ 开头svn
##变量函数
定义变量使用#set( $iAm = "good!" )
,而#set( $hhh = "good! $iAm" )
则会读取 $ 对应的变量的值,将值填充到对应的位置code
在找不到对应的变量的时候会将其当成普通字符串进行处理对象
当时用单引号将 $xxx 引发来的时候不会对其进行变量替换ci
在使用变量的时候可使用$name
和${name}
的形式,可是对于同时定义了name和names的状况,$names就没办法正确识别了, 就只能用${names}的形式。 对于复杂的对象类型变量,使用${person.name}能够访问获得name属性的值,其实这是经过对get方法的访问获得的, 也就是${person.name}
等同于${person.getName()}
element
###变量赋值
变量是弱类型的,能够有以下的赋值操做:
#set($foo = $bar) #set($foo =“hello”) #set($foo.name = $bar.name) #set($foo.name = $bar.getName($arg)) #set($foo = 123) #set($foo = [“foo”,$bar])
须要注意,在使用#set($foo = $bar)
以后,这两个变量就指向了同一个对象了,对一个变量的对象进行操做,会影响到另一个变量
##循环
#foreach($element in $list) This is $element $velocityCount #end
循环过程当中会将当前对象赋值给element,这个变量名能够修改,对应好便可, 循环过程当中的当前序号保存在velocityCount变量中,须要注意,序号从1开始每次加1
使用$foreach.count
也能够获取当前循环次数(从1开始),使用$foreach.index
获得的序号是从0开始的, 使用$foreach.hasNext
更能够获取是不是最后一次循环, 使用$foreach.first
和$foreach.last
能够分别获取开始和结束的元素
在循环体中使用#break
可停止循环
###遍历List和Map
遍历Map
#foreach($param in ${paramValues.keySet()}) <tr> <th>$param</th> <td>${paramValues.get($param)}</td> </tr> #end
遍历List
#foreach($sal in ${salerList}) $sal.name #end
##条件判断
#if(condition) ... #elseif(condition) … #else … #end
表达式使用boolean类型的结果便可,velocity提供的关系操做符有与、或、非,对应的符号是&&
、||
、!
,
$foo && $bar
##宏定义
宏相似于函数,定义和调用的语法:
#macro(macroName arg1 arg2 …) ... #end
#macroName(arg1 arg2 …)
各个参数之间使用空格隔开,不是逗号
如
#macro(sayHello $name) hello $name #end #sayHello("velocity")
##包含指令
包含指令可使用 #parse 和 #include 来实现,二者的区别是,
#parse
会将包含的文件中的内容看成相似源代码来处理,文件内容会进行velocity模板方面的解析;#include
则会仅仅将文件内容看成普通文本进行处理,原封不动放进结果中对于文件foo.vm:
#set($name ="velocity")
那么#parse和#include的用法分别是:
#parse("foo.vm") $name #include("foo.vm")
结果是
velocity #set($name ="velocity")
include当包含的参数有多个时,使用逗号分隔开;parse时能接受一个参数;全部被包含的文件都只能在模板文件的根目录
##注释
注释使用3种形式
1 ## 这是注释 2 #* 跨行注释 *# 3 #** 这是带有doc功能的注释 *#
##停止
使用#break
或者#stop
能够停止执行
##字面值
使用#literal()
和#end
包裹的代码不会进行处理,直接输出字面值
#literal() #foreach ($woogie in $boogie) nothing will happen to $woogie #end #end
会直接输出
#foreach ($woogie in $boogie) nothing will happen to $woogie #end