如何以速度动态地向地图添加属性?

时间:2011-05-01 02:40:43

标签: dictionary velocity

我有以下代码

$pageName = "test";

$Container = {};

我喜欢用变量设置$Container的属性。我试过了$Container.set("test", $pageName);。它没有引发任何错误,但$Container.test$Container.get("test");没有显示任何内容。

我该如何解决?

2 个答案:

答案 0 :(得分:13)

问题是set是错误的方法。你需要做一个看跌期权。记住 - Velocity正在调用Java方法。 Map对象上没有“set”方法。

具体来说,你可以做到

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

现在,一个奇怪的是,这将在页面中打印“true”或“false”,因为Map.put()方法返回一个布尔值。所以我总是这样做

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

执行put并将结果存储在另一个引用中(然后可以忽略),而不是将其呈现给页面。

答案 1 :(得分:0)

嘿,我遇到同样的问题是" true"或"假"打印在页面上,有一种更简单的方法来处理它。我做的有点奇怪,我做了Confluence,它当然使用了Velocity。我提到这一点,因为我知道Velocity可以用于不同的应用程序。

使用Confluence用户宏,我检查req变量的先前创建的属性,即请求变量,即" myPageVars"。然后我使用put方法根据宏参数放置一个新的键值对。通过使用$!前缀,而不仅仅是$,输出不会发送到屏幕。

... $!req.getAttribute(" myPageVars")。put($ paramKey,$ paramValue) ...

我对Velocity来说有点新鲜,所以我不能保证这会在每个上下文中都有效,但它在语法上似乎比整个#set更容易($ dummy等等。