2016-07-27 19 views
3

我有一個使用Apache Wicket 6.x的Java應用程序;有時例外StalePageException如下所述觸發並顯示在日誌中。但是,由於沒有對用戶的反饋,應用程序的行爲意外導致沮喪。Apache Wicket:在出現StalePageException時顯示錯誤消息

如何捕獲StalePageException並向用戶(最好使用反饋面板)解釋情況?

在標籤頁/窗口中打開一個有狀態頁面,然後從地址欄複製地址欄並在新標籤頁/窗口中打開它。然後回到第一個 選項卡/窗口並嘗試點擊任何有狀態的鏈接。這將導致 StalePageException。

由於Wicket檢測到同一頁面實例已在當前頁面的呈現和點擊鏈接的 之間渲染了 ,所以拋出它。 Wicket這樣做是因爲它不確定在初始呈現 和click事件之間是否存在 頁面樹層次結構中的任何更改。甚至有可能這個鏈接在頁面的最後一個版本中不存在 ,所以如果StalePageException之前沒有拋出 ,則此點擊可能導致 ComponentNotFoundException。

StalePageException只會導致呈現當前頁面。因此, 用戶將看到該頁面的最後一個版本,他將需要 再次點擊該鏈接。

回答

2

您需要使用自定義IRequestCycleListener(從AbstractRequestCycleListener擴展)。 重寫#onException()並且如果傳遞的異常是StalePageException,那麼您可以使用Session.get()。error(「...」)將其報告給用戶。只要確保在當前頁面中有一個FeedbackPanel。

0

你想通過捕獲異常實例嘗試一個更簡單的方法(可以說e)。然後檢查這種隱瞞的類型。並最終使用的繼承方法之一從java.lang.Throwable捕捉細節

if(e instanceof StalePageException){ 
     e.printStackTrace(); //can use other methods as per desire : getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace 
} 

請確認是否收到異常實例,可以讓你在你的代碼高亮顯示。