2016-07-27 41 views
3

Apache Wicket 6.xを使用するJavaアプリケーションがあります。時には例外StalePageExceptionが下記のようにトリガされ、ログに記録されます。ただし、ユーザーにフィードバックがないため、アプリケーションが予期せず動作し、不満を募らせます。Apache Wicket:StalePageExceptionが発生したときにエラーメッセージを表示します。

私はStalePageExceptionをキャプチャして、状況を説明するメッセージをユーザーに(できればフィードバックパネルを使用して)提示できますか?

タブ/ウィンドウでステートフルページを開き、アドレスバーの からURLをコピーして、新しいタブ/ウィンドウで開きます。その後、最初の タブ/ウィンドウに戻り、ステートフルリンクをクリックしてみてください。これにより、 StalePageExceptionが発生します。

Wicketは、現在のページのレンダリングと のリンクの間に同じページインスタンスが がレンダリングされていることを検出するため、スローされます。初期レンダリング とクリックイベントの間にページツリー階層の変更があるかどうか不明であるため、Wicketはこれを行います。このリンクはページの最後のバージョンにもはや が存在しない可能性もありますので、このクリックは につながる可能性があります。ComponentNotFoundException StalePageExceptionがスローされない場合 。

StalePageExceptionは現在のページのレンダリングにつながります。したがって、 ユーザーにはページの最終バージョンが表示され、彼は にリンクを再度クリックする必要があります。

答えて

2

カスタムIRequestCycleListener(AbstractRequestCycleListenerから拡張)を使用する必要があります。 #onException()をオーバーライドし、渡された例外がStalePageExceptionである場合、Session.get()。error( "...")を使用してその旨をユーザーに報告できます。現在のページにFeedbackPanelがあることを確認してください。

0

例外インスタンス(例:e)をキャプチャすることで、もっと簡単な方法を試したいですか?次に、この発作のタイプをチェックします。そして、最終的に、あなたのコード内で強調表示するために例外インスタンスを得ることが可能であるかどうかを確認してください詳細

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

をキャプチャするjava.lang.Throwableから継承されたメソッドのいずれかを使用します。