这个指南是针对Velocity模版语言(VTL)的说明。更多其它的信息,请参考Velocity用户指南(http://velocity.apache.org/engine/releases/velocity-1.7/user-guide.html)。
变量
表达式:
$ [ ! ][ { ][ a..z, A..Z ][ a..z, A..Z, 0..9, -, _ ][ } ]
示例:
属性
表达式:
$ [ { ][ a..z, A..Z ][ a..z, A..Z, 0..9, -, _ ]* .[a..z, A..Z ][ a..z, A-Z, 0..9, -, _ ]* [ } ]
示例:
方法
表达式:
$ [ { ][ a..z, A..Z ][ a..z, A..Z, 0..9, -, _ ]* .[ a..z, A..Z ][ a..z, A..Z, 0..9, -, _ ]*( [ optional parameter list... ] ) [ } ]
示例:
VTL属性可以使用取出set和get的速记表达式方式,$object.getMethod()或者$object.setMethod()都可以缩写成$object.Method,允许的情况下,一般都是比较喜欢写成属性的表达式方式。属性和方法主要的区别就在于方法可以有一个带参数的列表。
#set - Establishes the value of a reference
格式:
# [ { ] set [ } ] ( $ref = [ ", ‘ ]arg[ ", ‘ ] )
使用:
示例:
RHS也可以是一个表达式,比如:
#if/#elseif/#else - Output conditional on truth of statements
格式:
# [ { ] if [ } ] ( [condition] ) [output] [ # [ { ] elseif [ } ] ( [condition] ) [output] ]* [ # [ { ] else [ } ] [output] ] # [ { ] end [ } ]
使用:
示例:
操作名 |
符号 |
可选符号 |
示例 |
数字等于 |
== |
eq |
#if($foo == 42) |
字符等于 |
== |
eq |
#if($foo == ‘bar‘) |
对象相等 |
== |
eq |
#if($foo == $bar) |
不等 |
!= |
ne |
#if($foo != $bar) |
大于 |
> |
gt |
#if($foo > 42) |
小于 |
< |
lt |
#if($foo < 42) |
大于等于 |
>= |
ge |
#if($foo >= 42) |
小于等于 |
<= |
le |
#if($foo <= 42) |
boolean取反 |
! |
not |
#if(!$foo) |
注意:
#if( $foo == $bar)it‘s true!#{else}it‘s not!#end</li>
#foreach - Loops through a list of objects
格式:
# [ { ] foreach [ } ] ($refinarg)statement# [ { ] end [ } ]
用法:
示例:
Velocity提供了一个简单的方法来获取循环的次数:
<table>
#foreach( $customer in $customerList )
< tr><td>$foreach.count</td><td>$customer.Name</td></tr>
#end
< /table>
另外,在Velocity1.5中允许循环最大数字是可以控制的。默认没有限制:
# The maximum allowed number of loops.
directive.foreach.maxloops =
-1
#include - Renders local file(s) that are not parsed by Velocity
格式:
# [ { ] include [ } ] ( arg[ arg2 ... argn] )
示例:
#parse - Renders a local template that is parsed by Velocity
格式:
# [ { ] parse [ } ] ( arg )
示例:
递归也是被允许的,可以看一下velocity.properties中的parse_directive.maxdepth来修改parse的深度(默认的parse深度是10)。
#stop - Stops the template engine
格式:
# [ { ] stop [ } ]
使用场景:
停止目前的模版,在debug模版的时候比较好用。
#break - Stops the current directive
格式:
# [ { ] break [ } ]
使用场景:终止目前的内容指令,早期在#foreach中是用来提前结束循环的,也可以再其他的范围。你甚至可以在外部范围中跳过特殊的范围。
#evaluate - Dynamically evaluates a string or reference
格式:
# [ { ] evaluate [ } ] ( arg )
示例:
#define - Assigns a block of VTL to a reference
格式:
# [ { ] define [ } ] ( $ref )statement# [ { ] end [ } ]
示例:
#macro - Allows users to define a Velocimacro (VM), a repeated segment of a VTL template, as required
格式:
# [ { ] macro [ } ] ( vmname $arg1 [ $arg2 $arg3 ... $argn ] ) [ VM VTL code... ] # [ { ] end [ } ]
一旦定义,vm可以像其他VTL指令一样来使用。
#vmname( $arg1 $arg2 )
除此,当你在body中想要调用vm,你必须在vm前面添加@,通过$!bodyContent,body就会找到宏定义的引用。
#@vmname( $arg1 $arg2 ) here is the body#end
VMs可以2个地方定义:
注释不是运行时渲染的。
单行注释
## This is a comment.
多行注释
#*
This is a multiline comment.
This is the second line
*#
不做解析的内容是在运行时渲染的,而不是不解析。
#[[
This has invalid syntax that would normally need "poor man‘s escaping" like:
]]#
原文:http://www.cnblogs.com/treerain/p/vtl.html