从 Velocity 1.6 开始,不支持可选或命名参数。最近提交了一个带有此功能的补丁,因此我们可能会在未来的版本中看到它可用。
同时,考虑传入一个列表或值映射。例如,您可以按如下方式传入参数映射(需要 Velocity 1.5 或更高版本):
#macro(myMacro $p)
item 1: $p.param1
item 2: $p.param2
#end
#set($params = {"param1" : "val1", "param2":"val2"})
#myMacro($params)
显示:
item 1: val1
item 2: val2
要处理可选参数,请在宏中使用#if 来检查参数。向地图添加新元素有点混乱。由于 Java 方法“put”返回一个值,因此您必须使用 #set 来处理返回值。(否则它会显示在结果文本中)。
#macro(myMacro $p)
#if(!$p.param1)#set($dummy = $p.put("param1", "default1"))#end
#if(!$p.param2)#set($dummy = $p.put("param2", "default2"))#end
#if(!$p.param3)#set($dummy = $p.put("param3", "default3"))#end
item 1: $p.param1
item 2: $p.param2
item 3: $p.param3
#end
#set($params = {"param1" : "val1", "param2":"val2"})
#myMacro($params)
显示
item 1: val1
item 2: val2
item 3: default3