支持的流程控制有:#if...#else...#end(逻辑判断语句)和#foreach(... in ...)...#end(循环语句),可
以嵌套使用。
#foreach() #end用于循环输出
#foreach( $key in $allProducts.keySet() )
<li>Key: $key -> Value: $allProducts.get($key)</li>
#end
另外,foreach循环不仅可以显示数组内容,也可以显示java的Vector、List、Iterator等对象的内容,
#include,用于包括一些资源文件,当然include是不会去解析资源文件,这和#parse不同
#include( "one.txt" )
#parse,用于解析并且包括相应的资源文件
#parse( "me.vm" ),和主文件共享相应的Context
#stop,用于停止执行解析,并返回,主要用于调试功能。
基本上,使用以上的语法,可以定义出任何的模版了。当然,为了简化模版的定义,velocity特意推出了#macro这个强大的功能.
#macro,类似于宏定义,用于自定义相应的标记。
如下定义了一段宏,用于输出表格中的列表
#macro( tablerows $color $somelist )
#foreach( $something in $somelist )
<tr><td bgcolor=$color>$something</td></tr>
#end
#end
在模版中,只需要使用#tablerows($color $somelist)就可以取代里面的代码了:
#set( $greatlakes =
["Superior","Michigan","Huron","Erie","Ontario"] )
#set( $color = "blue" )
<table>
#tablerows( $color $greatlakes )
</table>
而且#macro 支持内嵌语法,所以对于模版的定义,就变得更加的灵活而简单了。