Velocity Velocimacros

Velocimacros

#macro script element 允许模板设计者定义一段可重用的VTL template。例如:

#macro ( d )

<tr><td></td></tr>

#end

在上面的例子中Velocimacro 被定义为d,然后你就可以在任何VTL directive 中以如下

方式调用它:

#d()

当你的template 被调用时,Velocity 将用<tr><td></td></tr>替换为#d()。

每个Velocimacro 可以拥有任意数量的参数――甚至0 个参数,虽然定义时可以随意设置

参数数量,但是调用这个Velocimacro 时必须指定正确的参数。下面是一个拥有两个参数

的Velocimacro,一个参数是color 另一个参数是array:

#macro ( tablerows $color $somelist )

#foreach ( $something in $somelist )

<tr><td bgcolor=$color>$something</td</tr>

#end

#end

调用#tablerows Velocimacro:

#set ( $greatlakes = [ “Superior”, “Michigan”, “Huron”, “Erie”, “Ontario” ] )

#set ( $color = “blue” )

<table>

#tablerows( $color $greatlakes )

</table>

经过以上的调用将产生如下的显示结果:

<table>

<tr><td bgcolor=” blue”> Superior </td></tr>

<tr><td bgcolor=” blue”> Michigan </td></tr>

<tr><td bgcolor=” blue”> Huron </td></tr>

<tr><td bgcolor=” blue”> Erie </td></tr>

<tr><td bgcolor=” blue”> Ontario </td></tr>

</table>

Velocimacros 可以在Velocity 模板内实现行内定义(inline),也就意味着同一个web site

内的其他Velocity 模板不可以获得Velocimacros 的定义。定义一个可以被所有模板共享

的Velocimacro 显然是有很多好处的:它减少了在一大堆模板中重复定义的数量、节省了

工作时间、减少了出错的几率、保证了单点修改。

上面定义的#tablerows( $color $list )Velocimacro 被定义在一个Velocimacros 模板

库(在velocity.properties 中定义)里,所以这个macro 可以在任何规范的模板中被调用。

它可以被多次应用并且可以应用于不同的目的。例如下面的调用:

#set ( $parts = [ “volva”, “stipe”, “annulus”, “gills”, “pileus” ] )

#set ( $cellbgcol = “#CC00FF” )

<table>

#tablerows( $cellbgcol $parts )

</table>

上面VTL 将产生如下的输出:

<table>

<tr><td bgcolor=”#CC00FF”> volva </td</tr>

<tr><td bgcolor=”#CC00FF”> stipe </td</tr>

<tr><td bgcolor=”#CC00FF”> annulus </td</tr>

<tr><td bgcolor=”#CC00FF”> gills </td</tr>

<tr><td bgcolor=”#CC00FF”> pileus </td</tr>

</table>

Velocimacro 可以使用以下任何元素作为参数:

猜你喜欢

转载自aoyouzi.iteye.com/blog/2088725