Apache Wicket:发生StalePageException时显示错误消息

时间:2016-07-27 10:32:41

标签: java exception exception-handling wicket wicket-6

我有一个使用Apache Wicket 6.x的Java应用程序;有时会触发异常StalePageException,如下所述,并显示在日志中。但是,由于没有对用户的反馈,应用程序会出现意外行为而导致沮丧。

如何捕获StalePageException并向用户发送消息(最好使用反馈面板)来解释情况?

  

在标签/窗口中打开有状态页面,然后从中复制网址   地址栏并在新标签/窗口中打开它。然后回到第一个   选项卡/窗口并尝试单击任何有状态链接。这将导致   StalePageException。

     

它被抛出,因为Wicket检测到相同的页面实例   已在当前页面的渲染和单击之间呈现   链接。 Wicket这样做是因为它不确定是否存在   初始渲染之间页面树层次结构的任何更改   和点击事件。这个链接甚至可能不再存在   存在于页面的最后一个版本中,因此可以导致此单击   如果未抛出StalePageException,则为ComponentNotFoundException   早。

     

StalePageException只会导致呈现当前页面。所以   用户将看到页面的最后版本以及他需要的   再次点击链接。

2 个答案:

答案 0 :(得分:2)

您需要使用自定义IRequestCycleListener(从AbstractRequestCycleListener扩展)。 覆盖#onException(),如果传递的异常是StalePageException,那么您可以使用Session.get()。error(“...”)向用户报告。只需确保当前页面中有一个FeedbackPanel。

答案 1 :(得分:0)

您是否希望通过捕获异常实例来尝试一种相当简单的方法(比如e)。然后检查这种感知的类型。并最终使用java.lang.Throwable中的一个继承方法来捕获详细信息

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

请验证是否可以在代码中突出显示异常实例。