2012-11-23 2 views
7

Hallo all Ich habe einige JSP-Seiten und ich benutze Struts2, um meine Formulare zu behandeln. Nach dem Senden eines Formulars durch den Benutzer wird die in der Adressleiste angezeigte URL zu somthing.action. Wenn der Benutzer die Seite aktualisiert, werden die Formulare erneut gesendet. Wie kann ich damit umgehen? nach Einreichung eines Formulars.Vermeiden Sie doppelte Einreichung von Struts 2 JSP Seite

Antwort

4

Wenn das Ziel doppelte Einreichung der Formulare zu verhindern ist, dann verwenden token Abfangjäger http://struts.apache.org/2.x/docs/token-interceptor.html oder tokenSession Abfangjäger http://struts.apache.org/2.x/docs/token-session-interceptor.html.

Wenn Sie einfach die Seite nach dem Senden aktualisieren möchten, ohne erneut zu senden, dann redirect zu Aktion, wo Sie nur Ergebnisse nicht Formular anzeigen. Verwenden Sie dazu redirectAction Ergebnis.

+0

Danke Aleksandr M .... – edaklij

1

POST REDIRECT GET

Dieses Muster muss befolgt werden, Wiedervorlage von Form auf Refresh zu verhindern. Das bedeutet, nach dem Senden einer POST-Anforderung sollte POST eine REDIRECT-Antwort senden, um die Zielseite unter Verwendung von GET abzurufen. Wenn der Benutzer bei diesem Muster die Seite aktualisiert, wird nur die GET-Anforderung erneut ausgeführt, sodass die gleiche Seite abgerufen wird, ohne dass irgendetwas auf dem Server aktualisiert wird.

Dies ist ein gängiges Designmuster, das für das Web empfohlen wird. Google würde dazu eine Menge Ressourcen bereitstellen.

3

+1 zu beiden anderen Antworten.

Post/Redirect/Get ist das klassische Muster für jede Webtechnologie.

Token Interceptor ist ein anderer Weg zu gehen, wenn Sie Struts2 verwenden;

Es gibt einen dritten Weg zu gehen, wenn Sie nicht über Retro-Kompatibilität mit älteren Browsern ist es egal, oder Browser mit Javascript deaktiviert: HTML5 ‚s window.history.pushState.

Setzen Sie die URL auf die ursprüngliche Adresse zurück, nachdem die Seite geladen wurde, und drücken Sie F5, um die Originalseite zu erhalten, anstatt die Anfrage erneut zu senden.

$(document).ready(function() { 
    window.history.pushState("","", "myOriginalUrlWithNoParams"); 
}); 
+1

+1 für HTML5 Trick. –