Именованные параметры скорости для макроса

У меня есть макрос, принимающий несколько параметров. Некоторые из них являются необязательными, и если параметр оставить пустым, он будет заменен значением по умолчанию.

Теперь вопрос в том, как сделать это максимально простым для обычного веб-дизайнера. Есть ли какие-либо другие возможности, кроме моих примеров, для обработки этого случая?

Пример 1:

Очевидной проблемой здесь являются необязательные значения.

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

Пример 2:

И здесь проблема заключается в возможной проблеме, когда один и тот же макрос используется более одного раза, и все переменные не установлены снова.

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

#macro (myTag)
...
#end

person Petteri H    schedule 12.02.2009    source источник


Ответы (1)


Начиная с 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
person Will Glass    schedule 27.02.2009