2016-07-27 46 views
3

Ich habe eine Java-Anwendung mit dem Apache Wicket 6.x; manchmal wird die Ausnahme StalePageException wie unten beschrieben ausgelöst und erscheint im Protokoll. Da jedoch keine Rückmeldung an den Benutzer erfolgt, verhält sich die Anwendung unerwartet und verursacht Frustration.Apache Wicket: Eine Fehlermeldung wird angezeigt, wenn StalePageException auftritt

Wie kann ich die StalePageException erfassen und eine Meldung an den Benutzer (vorzugsweise mit einem Feedback-Panel) zur Erläuterung der Situation?

Öffnen Sie eine Stateful-Seite in einem Tab/Fenster, kopieren Sie die URL aus der Adressleiste und öffnen Sie sie in einem neuen Tab/Fenster. Gehen Sie dann zurück zum ersten Register/Fenster und versuchen Sie, auf einen beliebigen Stateful-Link zu klicken. Dies führt zu StalePageException.

Es wird ausgelöst, da Wicket erkennt, dass dieselbe Seiteninstanz zwischen dem Rendern der aktuellen Seite und dem Klick auf der Verknüpfung gerendert wurde. Wicket tut dies, weil es nicht sicher ist, ob es Änderungen in der Seitenbaumhierarchie zwischen dem anfänglichen Rendering und dem Klickereignis gibt . Es ist sogar möglich, dass dieser Link nicht mehr in der letzten Version der Seite vorhanden ist, so dass dieser Klick zu ComponentNotFoundException führen kann, wenn StalePageException nicht früher ausgelöst wird.

StalePageException führt nur zum Rendern der aktuellen Seite. So wird der Benutzer die letzte Version der Seite sehen und (s) er muss klicken Sie den Link erneut.

Antwort

2

Sie müssen den benutzerdefinierten IRequestCycleListener (von AbstractRequestCycleListener) verwenden. Überschreiben Sie #onException(), und wenn die übergebene Ausnahme StalePageException ist, können Sie Session.get(). Error ("...") verwenden, um dies dem Benutzer mitzuteilen. Stellen Sie sicher, dass Sie ein FeedbackPanel auf der aktuellen Seite haben.

0

Möchten Sie einen einfacheren Ansatz versuchen, indem Sie die Ausnahme-Instanz erfassen (sagen wir e). Überprüfen Sie dann den Typ dieser Exception. Und schließlich eine der geerbten Methoden verwenden, um von java.lang.Throwable die Details zu erfassen

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

Bitte überprüfen, ob die Ausnahme Instanz immer möglich ist, für Sie in Ihrem Code zu markieren.