Начиная с 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)
1012 * отображает *
item 1: val1
item 2: val2
item 3: default3