2015-08-27 31 views
0

我想使用SSJS來測試會話作用域bean是否事實上在beforePageLoad事件中有效。如果使用「調試」工具欄清除會話範圍,則在嘗試測試bean以查看它是否爲空時會出錯。測試以查看bean是否被實例化?

如果(registrationBean == NULL){

錯誤是: 錯誤而執行JavaScript動作表達 腳本解釋器誤差,線= 2,COL = 22:[的ReferenceError] 'registrationBean' 未找到

問題是如何測試bean以查看它是否被實例化?如果沒有,那麼我想轉到另一個XPage(重定向),以允許用戶輸入用於填充bean的值。

或者,這是否只是一個問題,因爲我使用調試工具欄清除所有會話和應用程序範圍?

Howard

回答

1

使用try/catch塊。如果你得到錯誤,它是空的。

我懷疑這只是一個問題,因爲applicationScope已被清除。通常,第一次引用變量的嘗試會實例化對象。但是,清除整個applicationScope可能會破壞應用程序中的很多XPage代碼,應該避免。

+0

是的,我想我正在做一些不現實的事情。甚至XPage上的調試工具欄(也就是這樣)不會加載!然而,嘗試/抓住好主意。如果沒有實例化,bean不應該爲null嗎? – Howard

+2

問題是,如果您嘗試檢查,則對bean名稱的引用將傳遞給VariableResolver。我對當時會發生什麼的理解是,faces-config中的定義給出了Java類的映射。因此,如果您引用bean名稱,那麼XPages(JSF?)運行時會標識出您想要的名稱,因此會嘗試在相關作用域中查找該變量的現有實例,否則懶加載它。所以基本上,它不能爲null,除非NSF的XPages運行時被破壞(就像這裏發生的那樣,你需要重建它來解決)。 –

+0

@PaulStephenWhathers另一種選擇是在構造函數 –

1

首先,確保bean在faces_config.xml中設置(但似乎是這種情況)。然後,在實例化之前,您應該無法引用bean ...

查看bean何時實例化的簡單方法是將System.out.println(「....」)放入豆的構造函數。這應該會使你走上正軌。你可以(應該!)使用OpenNTF LogReader來看看發生了什麼 - 這會顯示頁面和bean引發的任何錯誤。

然後當然通過調試工具欄清除所有數據可能會使系統處於「未知」狀態 - 您應該嘗試隨後重新加載頁面,以確保它是明確的/實例化的。

/約翰

相關問題