2016-07-27 84 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 
} 

请确认是否收到异常实例,可以让你在你的代码高亮显示。