Velocity命名宏的参数

时间:2009-02-12 15:06:01

标签: usability macros velocity

我有一个宏取几个参数。其中一些是可选的,如果参数为空,则将替换为默认值。

现在的问题是如何让普通网页设计师尽可能轻松。除了我的例子之外还有其他可能性来处理这种情况吗?

示例1:

这里显而易见的问题是可选值。

#macro (myTag $param1 $param2 $param3)
...
#end

示例2:

这里的问题是当同一个宏被多次使用并且所有变量都没有再次设置时可能会出现问题。

#set ($param1="value1") 
#set ($param2="value2") 
#set ($param3="value3") 

#macro (myTag)
...
#end

1 个答案:

答案 0 :(得分:6)

从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