Bearbeiten der Übermittlung doppelter Formulare in Spring MVC
Wenn Sie im Beispiel des letztenSpring MVC form handlingdie Ansicht zum Formularerfolg aktualisieren, werden die meisten Browser in einem Popup-Dialogfeld aufgefordert, die erneute Übermittlung des Formulars zu bestätigen. Wenn Sie auf "Ja" klicken, wird das Formular erneut gesendet. Dieses Szenario wird als doppelte Formularübermittlung bezeichnet.
Abbildung: Beispiel für die Übermittlung eines doppelten Formulars.
Die übliche Lösung hierfür ist die Verwendung des Entwurfsmusters „Post/Redirect/Get“. Es wird zu einer anderen URL umgeleitet, wenn die Formularübermittlung erfolgreich ist, anstatt eine Webseite direkt zurückzugeben.
Note
Überprüfen Sie die Detailerklärung vonPost/Redirect/Get Design Pattern in Wiki.
Post/Redirect/Get Design Pattern in Spring MVC
In diesem Tutorial zeigen wir Ihnen, wie Sie das Entwurfsmuster "Post/Redirect/Get" in Spring MVC anwenden, um das Problem der doppelten Formularübermittlung im Beispiel vonlast form handlingzu lösen.
1. Doppelte Formularübermittlung
Siehe unten normale Formulardeklaration, die das Problem der Übermittlung doppelter Formulare löst.
Datei: mvc-dispatcher-servlet.xml
/WEB-INF/pages/ .jsp
Im obigen Snippet gibtCustomerController
direkt eine Ansicht "CustomerSuccess" zurück, die stattdessenreplace with a redirect URL sein sollte.
2. Umleitungsansicht
Deklarierte eine Überprüfungsansicht mit dem Namen "customerSuccessRedirect" und gab eine URL "CustomerSuccess.htm" zurück.
Datei: spring-views.xml
3. Federkonfiguration
Aktualisieren Sie die Einstellungen vonmvc-dispatcher-servlet.xml, um die gesamte Spring-Konfiguration miteinander zu verknüpfen.
-
Aktualisieren Sie die "successView" auf die neue Umleitungsansicht mit dem Namen "customerSuccessRedirect".
-
Deklarieren Sie ein "XmlViewResolver", um die Umleitungsansicht zu laden.
-
Geben Sie eine Prioritätsreihenfolge für die "InternalResourceViewResolver" und "XmlViewResolver" ein, andernfalls stimmen die "InternalResourceViewResolver" immer überein und geben Ihrer Anwendung keine Chance, die "XmlViewResolver" aufzurufen. .
-
Deklarieren Sie einen "ParameterizableViewController" -Controller so, dass er mit der Umleitungs-URL übereinstimmt, und geben Sie eine Ansicht an den Benutzer zurück. Da die "ControllerClassNameHandlerMapping" die Zuordnung für keinen eingebauten Spring-Controller generiert haben, müssen Sie die explizite Zuordnung in "SimpleUrlHandlerMapping" definieren.
Datei: mvc-dispatcher-servlet.xml
customerSuccessController /WEB-INF/pages/ .jsp /WEB-INF/spring-views.xml
4. Wie es funktioniert?
1. Zugriffs-URL:http://localhost:8080/SpringMVC/customer.htm.
2. Füllen Sie das Formular aus und senden Sie es ab.
3. Geben Sie "successView" zurück, dh "customerSuccessRedirect".
4. "XmlViewResolver" stimmt überein und gibt eine "RedirectView" mit der URL "CustomerSuccess.htm" zurück.
5. "SimpleUrlHandlerMapping" stimmt damit überein und gibt einen ParameterizableViewController "customerSuccessController" und den Ansichtsnamen "CustomerSuccess" zurück.
customerSuccessController
6. "InternalResourceViewResolver" stimmt überein und gibt die endgültige Ansicht "/WEB-INF/pages/CustomerSuccess.jsp" zurück.
/WEB-INF/pages/ .jsp
7. URL geändert inhttp://localhost:8080/SpringMVC/CustomerSuccess.htm.
8. Aktualisieren Sie die Seite mit dem Erfolgsformular. Das Dialogfeld zur erneuten Übermittlung des Formulars wird nicht mehr angezeigt.
Note
Das Gesamtkonzept besteht darin, anstelle einer direkten Seite eine Weiterleitungs-URL zurückzugeben.
Quellcode herunterladen
Laden Sie es herunter -SpringMVC-Duplicated-Form-Submission-Solution.zip (12 KB)