我有以下代码
$pageName = "test";
$Container = {};
我喜欢用变量设置$Container
的属性。我试过了$Container.set("test", $pageName);
。它没有引发任何错误,但$Container.test
或$Container.get("test");
没有显示任何内容。
我该如何解决?
答案 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等等。