在我正在处理的应用程序中,我需要获取所有applicationScope变量的名称列表,然后我需要循环遍历它们并过滤掉以知道字符串开头的那些$ xyx。我以为是applicationScope.keySet()。 我正在使用此代码作为启动器: var col = applicationScope.keySet(); var itr:java.util.Iterator = col.iterator(); if(itr.hasNext()){ var str:String = itr.next(); dBar.info(str,“Value =”); }
如果我将变量col放在viewScope中,它会显示所有键的列表。但是当我运行脚本时,dBar信息中显示的值不是键,而是一些其他信息,我不确定它来自何处。 我应该能够通过密钥列表进行迭代,我错过了什么? 此代码位于前页加载事件
中答案 0 :(得分:2)
经过一番探索和实验,我得到了这个工作:
var col = applicationScope.keySet();
var itr:java.util.Iterator = col.iterator();
while (itr.hasNext()){
var str:Map.Entry = itr.next();
if (str.substring(0,9) == "$wfsLock_"){
//do stuff
}
}
所以我现在是一个快乐的露营者。
答案 1 :(得分:0)
虽然您的代码在SSJS中有效,但它不正确(这就是我不喜欢SSJS的原因......)。
applicationScope
是java.util.Map接口的实现,keySet()
方法返回包含该Map中键的Set
。每个条目(可能)是String
(其他数据类型,如整数实际上也是有效的)。这条线
var str:Map.Entry = itr.next();
不会将其投放到Map.Entry
:它实际上没有做任何事情:str
仍然是一个字符串。
Map接口还有一个entrySet()
方法,用于返回条目(Map.Entry
)。您可以使用它来检索密钥和值:
var it = applicationScope.entrySet().iterator();
while (it.hasNext()) {
var entry = it.next();
print( entry.getKey() + " = " + entry.getValue() );
}
(在此代码中,print()
行将使用密钥的toString()
方法以及将信息发送到控制台的值
我从您的代码中看到您已经安装了我的XPages Debug Toolbar。您还可以使用它来快速检查范围中的内容以及实际的数据类型。