Bearbeitung der doppelten Formularübergabe in Spring MVC

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.

SpringMVC-Duplicate-Form-Submit

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.

  1. Aktualisieren Sie die "successView" auf die neue Umleitungsansicht mit dem Namen "customerSuccessRedirect".

  2. Deklarieren Sie ein "XmlViewResolver", um die Umleitungsansicht zu laden.

  3. 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. .

  4. 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?

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
         
         
   

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)