我使用的是<h:selectOneMenu>
,並附加了valueChangeListener屬性。監聽器調用一些業務代碼(例如數據庫查詢)來基於新的選定值加載其他數據。我注意到,當代碼中發生(意外)異常時,AbortProcessingException
會包裝原始異常,然後是日誌,但不會通知用戶出現問題。通過聽衆調用時應如何處理技術例外
有沒有辦法在調用偵聽器時通知用戶某些意外事件發生了致命錯誤?
我從Differences between action and actionListener知道一個動作會更適合這樣的表達,但是我不能在<h:selectOneMenu>
中設置動作,而只能是一個偵聽器。我應該如何更改我的頁面,以便在所選項目更改時調用「真實業務操作」(允許失敗的操作)?
我不想內'嘗試{...}趕上(例外){方法addMessage(「錯誤包裝每個監聽器「);}'。我期望與簡單操作相同的行爲:任何致命/意外的異常只能被Web服務器捕獲並顯示錯誤頁面。 – Gaetan
此外,解決方案2仍然調用偵聽器,並且JSF將吞服偵聽器引發的任何異常。 – Gaetan
總是樂意幫助你實現你的目標。沒錯,監聽器通常會吞噬異常,所以解決方案1可以幫助您捕獲異常並通過FacesMessages向用戶發送單個消息。如果你想要一個「一刀切」的解決方案,請調查「ExceptionHandlerFactory」解決方案。你也是正確的,即F:Ajax的監聽器「只是一個傾聽者」,而是因爲它是在生命週期的其他部分執行,它可能給你更多的可能性,例如轉發/重定向。這是你的項目,你的決定。 –