我有一个使用Apache Wicket 6.x的Java应用程序;有时会触发异常StalePageException,如下所述,并显示在日志中。但是,由于没有对用户的反馈,应用程序会出现意外行为而导致沮丧。
如何捕获StalePageException并向用户发送消息(最好使用反馈面板)来解释情况?
在标签/窗口中打开有状态页面,然后从中复制网址 地址栏并在新标签/窗口中打开它。然后回到第一个 选项卡/窗口并尝试单击任何有状态链接。这将导致 StalePageException。
它被抛出,因为Wicket检测到相同的页面实例 已在当前页面的渲染和单击之间呈现 链接。 Wicket这样做是因为它不确定是否存在 初始渲染之间页面树层次结构的任何更改 和点击事件。这个链接甚至可能不再存在 存在于页面的最后一个版本中,因此可以导致此单击 如果未抛出StalePageException,则为ComponentNotFoundException 早。
StalePageException只会导致呈现当前页面。所以 用户将看到页面的最后版本以及他需要的 再次点击链接。
答案 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
}
请验证是否可以在代码中突出显示异常实例。