欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Velocity Velocimacros

程序员文章站 2022-07-12 21:31:48
...

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 可以使用以下任何元素作为参数: