Traitement des soumissions en double dans Spring MVC

Gestion de la soumission de formulaires en double dans Spring MVC

Dans le dernier exemple deSpring MVC form handling, si vous actualisez la vue de réussite du formulaire, la plupart des navigateurs afficheront une boîte de dialogue contextuelle pour confirmer la nouvelle soumission du formulaire. Si vous cliquez sur «oui», le formulaire sera à nouveau soumis, ce scénario est connu sous le nom de soumission de formulaire en double.

Figure: exemple de soumission de formulaire dupliqué.

SpringMVC-Duplicate-Form-Submit

La solution courante consiste à utiliser le modèle de conception «Post/Redirect/Get». Il redirigera vers une autre URL si la soumission du formulaire réussit, au lieu de renvoyer directement une page Web.

Note
Vérifiez l'explication détaillée dePost/Redirect/Get Design Pattern in Wiki.

Post/Redirect/Get Design Pattern in Spring MVC

Dans ce didacticiel, nous vous montrons comment appliquer le modèle de conception «Post/Redirect/Get» dans Spring MVC pour résoudre le problème de soumission de formulaire dupliqué dans l'exemplelast form handling.

1. Soumission de formulaire en double

Voir ci-dessous la déclaration de formulaire normale qui rencontrera le problème de soumission de formulaire en double.

Fichier: mvc-dispatcher-servlet.xml



   
    
    
   

   
        
             /WEB-INF/pages/
        
        
             .jsp
        
    

Dans l'extrait de code ci-dessus, leCustomerController renvoie directement une vue «CustomerSuccess», qui devrait êtrereplace with a redirect URL à la place.

2. Rediriger la vue

Déclaré une vue de révision, nommée «customerSuccessRedirect» et renvoyer une URL «CustomerSuccess.htm».

Fichier: spring-views.xml


   
   
       
    

3. Configuration du ressort

Mettez à jour les paramètres demvc-dispatcher-servlet.xml pour lier toutes les configurations de Spring.

  1. Mettez à jour les «successView» vers la nouvelle vue de redirection, nommée «customerSuccessRedirect».

  2. Déclarez un «XmlViewResolver» pour charger la vue de redirection.

  3. Mettez un ordre de priorité pour les «InternalResourceViewResolver» et «XmlViewResolver», sinon les «InternalResourceViewResolver» correspondront toujours et ne donneront aucune chance à votre application d'appeler les «XmlViewResolver» .

  4. Déclarez un contrôleur «ParameterizableViewController» pour correspondre à l'URL de redirection et renvoyer une vue à l'utilisateur. Étant donné que les «ControllerClassNameHandlerMapping» ne génèrent le mappage pour aucun contrôleur Spring intégré, vous devez donc définir le mappage explicite dans «SimpleUrlHandlerMapping».

Fichier: mvc-dispatcher-servlet.xml



   
    
    

    
   

   
   
        
            
                customerSuccessController
            
        
   

   
       
   

   
        
             /WEB-INF/pages/
        
        
             .jsp
         
         
   

   
        
          /WEB-INF/spring-views.xml
     
     
   

4. Comment ça fonctionne?

2. Remplissez et soumettez le formulaire.

3. Renvoie «successView», qui est «customerSuccessRedirect».

   
    
    
   

4. «XmlViewResolver» le correspond et renvoie un «RedirectView» avec l'URL «CustomerSuccess.htm».

   
       
    

5. «SimpleUrlHandlerMapping» le correspond et renvoie un ParameterizableViewController, «customerSuccessController», et renvoie le nom de la vue «CustomerSuccess».

   
        
            
                customerSuccessController
            
        
   
   
       
   

6. «InternalResourceViewResolver» le correspond et renvoie la vue finale «/WEB-INF/pages/CustomerSuccess.jsp».

   
        
             /WEB-INF/pages/
        
        
             .jsp
         
         
   

8. Essayez d'actualiser la page du formulaire de réussite, la boîte de dialogue de nouvelle soumission du formulaire ne vous demandera plus.

Note
Le concept global est de renvoyer une URL de redirection au lieu d'une page directe.

Télécharger le code source