#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 и т.д. строка.