2014-02-18 64 views
1

在我正在處理的應用程序中,我需要獲取所有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 =」); }需要獲取所有applicationScope變量的名稱陣列

如果我把變量col放在viewScope中,它顯示了所有鍵的列表。但是當我運行腳本時,dBar信息中顯示的值不是關鍵字,而是一些其他信息,我不確定它來自哪裏。 我應該能夠遍歷鍵列表,我是否錯過了一些東西? 此代碼是在之前頁面加載事件

回答

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 
    } 
} 

所以我現在是一個快樂的人。

+0

除了您明確添加的任何自定義條目之外,所有作用域都包含平臺自動填充的條目。如果您列出的方法滿足您的需求,請務必將自己的答案標記爲正確。 –

+0

不能接受答案,但是我的答案是可行的 –

+0

比爾,你實際上處於更多Java的交叉路口。看看託管的bean,它可以讓你更好地控制存儲在哪裏以及如何訪問它。 – stwissel

0

雖然你的代碼在SSJS中工作,但它不正確(這就是爲什麼我不喜歡SSJS ...)。

applicationScopejava.util.Map接口的實現,keySet()方法返回一個Set,其中包含該Map中的鍵。每個條目(可能)是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。您也可以使用它來快速檢查範圍內的內容以及實際數據類型是什麼。

+0

謝謝馬克,在這種情況下,鍵和值的數據類型是衆所周知的和可預測的。事實上,價值是一個數組。但它會嘗試你的代碼。 –