2014-11-20 122 views
2

我只是在學習Java,並且對從XPage到JavaBean的調用有問題。Javabean錯誤捕獲/處理

我正在研究一個從Declan Sciolla-Lynch's blog獲得的JavaBean,它在大多數情況下都能很好地工作。鏈接指向示例代碼。

本質上,JavaBean連接到names.nsf併爲各種查找操作提取各個字段。 IE用戶的電話或電子郵件地址。類似於我們過去實現的現有LotusScript類。我們有一個附加信息的輔助目錄,我使用了Declan的示例並對其進行了修改。它現在指向一個不同的服務器,nsf和其他字段。它在正常情況下工作。

但是我遇到了兩個問題,導致類失敗並顯示無用的「Can not Instantiate Class」錯誤。這些問題與ACL和數據庫複製公式相關,並且會得到解決,但我想盡量減少環境問題。問題是我無法在EL或SSJS中捕獲它,因爲它發生在JavaBean/class級別。圍繞Java代碼有一個try {} catch {},但「Can not Instantiate Class」錯誤仍然存​​在。我試圖在SSJS調用JavaBean的XPage上加載三個字段的默認值。

有沒有辦法在JavaBean中捕獲錯誤並將其傳遞給XPages,以便在調用託管bean之前測試加載的類?

回答

2

當Java類構造函數拋出錯誤時,會發生「Can not Instantiate Class」錯誤。

一個try/catch塊添加到您的Java bean的構造函數和傳遞錯誤信息到XPage在catch塊:

先添加一個錯誤信息控制 「messages1」 到XPage

<xp:messages id="messages1"></xp:messages> 

然後在Java bean中將錯誤消息寫入此控件中

import javax.faces.application.FacesMessage; 
import javax.faces.context.FacesContext; 

public class MyClass implements Serializable { 

    public MyClass() { 
     try { 
      ... 
     } catch (Exception e) { 
      FacesContext.getCurrentInstance().addMessage("messages1", 
       new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), "")); 
     } 
+0

如果頁面上沒有顯示錯誤控制,該怎麼辦?消息將在哪裏去?仍然在控制檯?可用於Xpages日誌閱讀器?我認爲它會在那種情況下消失......不知道我喜歡那樣。我想一些如何將錯誤發送到一個不錯的errorPage我認爲... – 2014-11-20 20:13:41

+0

如果設置一個私人變量如果錯誤被拋出,然後有一個getter像isInitError,也許另一個getErrorMsg?那麼你可以在使用bean方法之前測試isInitError? – Howard 2014-11-20 20:27:28

+0

@大衛,你是對的。通常我有一個自定義錯誤頁面,並在那裏顯示嚴重錯誤。這更多的是對問題最後一段的回答。 – 2014-11-20 20:27:33