我有一个使用Apache Wicket 6.x的Java应用程序;有时,异常StalePageException如下所述触发,并显示在日志中。但是,由于没有反馈给用户,因此应用程序的行为异常,从而导致沮丧。
如何捕获StalePageException并向用户显示消息(最好使用反馈面板)以说明情况?
在标签页/窗口中打开有状态页面,然后从
地址栏,然后在新的标签/窗口中将其打开。然后回到第一
标签/窗口,然后尝试单击任何有状态的链接。这将导致
StalePageException。
抛出该错误是因为Wicket检测到同一页面实例具有
在当前页面的渲染和点击之间渲染
链接。 Wicket这样做是因为不确定是否有
初始呈现之间页面树层次结构中的任何更改
和点击事件。甚至有可能该链接不再存在
页面的最后一个版本中存在,因此此点击可能会导致
ComponentNotFoundException如果未引发StalePageException
较早。
StalePageException只会导致当前页面的呈现。所以
用户将看到页面的最新版本,并且他需要
再次单击链接。
最佳答案
您需要使用自定义IRequestCycleListener(从AbstractRequestCycleListener扩展)。
重写#onException(),如果传递的异常是StalePageException,则可以使用Session.get()。error(“...”)将其报告给用户。只要确保您在当前页面中有一个FeedbackPanel。