Как динамически добавить свойство к карте в velocity?

#dictionary #velocity

#словарь #скорость

Вопрос:

У меня есть следующий код

 $pageName = "test";

$Container = {};
  

Мне нравится задавать свойство $Container с помощью переменной. Я пытался $Container.set("test", $pageName); . Это не вызвало никаких ошибок, но $Container.test или $Container.get("test"); ничего не отображало.

Как мне это исправить?

Комментарии:

1. ах .. извините, ребята .. только что нашел решение. вместо использования set мне нужно использовать put

Ответ №1:

Проблема в том, что set — это неправильный метод. Вам нужно выполнить put. Помните — Velocity вызывает методы Java. Для объекта Map нет метода «set».

В частности, вы можете сделать

 $Container.put("test", $pageName)
  

Теперь одна странная вещь заключается в том, что при этом на странице будет напечатано «true» или «false», поскольку метод Map.put() возвращает логическое значение. Я всегда так делаю

 #set($dummy = $Container.put("test", $pageName))
  

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

Комментарии:

1. Что, если вы хотите выполнить итерацию по ключам на карте и динамически обновлять ее? Я обнаружил, что когда вы вводите значение ключа «$value = $arr.get ($ key)», изменяете его, а затем «$arr.put($ val)», все записи на карте заканчиваются как последняя введенная, потому что все они ссылаются на один и тот же «$ val»

Ответ №2:

Эй, я столкнулся с той же проблемой, что и «true» или «false», напечатанные на странице, и есть более простой способ справиться с этим. То, что я сделал, немного странно, и я сделал это Confluence, который, конечно, использует Velocity под прикрытием. Я упоминаю это, потому что понимаю, что Velocity может использоваться в разных приложениях.

С помощью пользовательского макроса Confluence я проверяю наличие ранее созданного атрибута в переменной req, переменной запроса, то есть «myPageVars». Затем я использую метод put, чтобы поместить новую пару ключ-значение на основе параметров макроса. Используя $! префикс, а не просто $, вывод не отправляется на экран.

… $!req.getAttribute(«myPageVars»).put( $paramKey, $paramValue ) …

Я несколько новичок в Velocity, поэтому не могу гарантировать, что это будет работать в любом контексте, но это кажется синтаксически проще, чем весь #set ($ dummy и т.д. строка.