需要获取所有applicationScope变量的名称数组

时间:2014-02-18 22:47:45

标签: javascript xpages

在我正在处理的应用程序中,我需要获取所有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信息中显示的值不是键,而是一些其他信息,我不确定它来自何处。 我应该能够通过密钥列表进行迭代,我错过了什么? 此代码位于前页加载事件

2 个答案:

答案 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的原因......)。

applicationScopejava.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。您还可以使用它来快速检查范围中的内容以及实际的数据类型。

相关问题