Spring MVCで重複したフォームの提出を処理する

Spring MVCでの重複したフォーム送信の処理

最後のSpring MVC form handlingの例では、フォームの成功ビューを更新すると、ほとんどのブラウザーは、フォームの再送信について確認するためのポップアップダイアログを表示します。 [はい]をクリックすると、フォームが再送信されます。このシナリオは、重複したフォーム送信としてよく知られています。

図:重複したフォーム送信の例。

SpringMVC-Duplicate-Form-Submit

これに対する一般的な解決策は、「Post/Redirect/Get」デザインパターンを使用することです。 Webページを直接返すのではなく、フォームの送信に成功すると、別のURLにリダイレクトします。

Note
Post/Redirect/Get Design Pattern in Wikiの詳細説明を確認してください。

Post/Redirect/Get Design Pattern in Spring MVC

このチュートリアルでは、Spring MVCで「Post/Redirect/Get」デザインパターンを適用して、last form handlingの例で重複したフォーム送信の問題を解決する方法を示します。

1. 重複したフォーム送信

重複したフォーム送信の問題に遭遇する通常のフォーム宣言を参照してください。

ファイル:mvc-dispatcher-servlet.xml



   
    
    
   

   
        
             /WEB-INF/pages/
        
        
             .jsp
        
    

上記のスニペットでは、CustomerControllerは「CustomerSuccess」ビューを直接返します。代わりにreplace with a redirect URLにする必要があります。

2. ビューをリダイレクト

customerSuccessRedirect」という名前のレビュービューを宣言し、URL「CustomerSuccess.htm」を返します。

ファイル:spring-views.xml


   
   
       
    

3. スプリング構成

mvc-dispatcher-servlet.xml設定を更新して、すべてのSpringの構成をリンクします。

  1. successView」を「customerSuccessRedirect」という名前の新しいリダイレクトビューに更新します。

  2. XmlViewResolver」を宣言して、リダイレクトビューをロードします。

  3. InternalResourceViewResolver」と「XmlViewResolver」に優先順位を付けます。そうしないと、「InternalResourceViewResolver」が常に一致し、アプリケーションが「XmlViewResolver」を呼び出す機会がなくなります。 。

  4. リダイレクトURLに一致するように「ParameterizableViewController」コントローラーを宣言し、ビューをユーザーに返します。 「ControllerClassNameHandlerMapping」は組み込みのSpringのコントローラーのマッピングを生成しないため、「SimpleUrlHandlerMapping」で明示的なマッピングを定義する必要があります。

ファイル:mvc-dispatcher-servlet.xml



   
    
    

    
   

   
   
        
            
                customerSuccessController
            
        
   

   
       
   

   
        
             /WEB-INF/pages/
        
        
             .jsp
         
         
   

   
        
          /WEB-INF/spring-views.xml
     
     
   

4. 使い方?

2. フォームに入力して送信します。

3. 「customerSuccessRedirect」である「successView」を返します。

   
    
    
   

4. 「XmlViewResolver」はそれに一致し、URL「CustomerSuccess.htm」の「RedirectView」を返します。

   
       
    

5. 「simpleUrlHandlerMapping」はそれに一致し、ParameterizableViewController「customerSuccessController」を返し、ビュー名「CustomerSuccess」を返します。

   
        
            
                customerSuccessController
            
        
   
   
       
   

6. 「internalResourceViewResolver」はそれに一致し、最終ビュー「/WEB-INF/pages/CustomerSuccess.jsp」を返します。

   
        
             /WEB-INF/pages/
        
        
             .jsp
         
         
   

7. URLがhttp://localhost:8080/SpringMVC/CustomerSuccess.htmに変更されました。

8. 成功フォームページを更新してください。フォームの再送信ダイアログが表示されなくなります。

Note
全体的な概念は、直接ページではなくリダイレ​​クトURLを返すことです。

ソースコードをダウンロード

ダウンロード–SpringMVC-Duplicated-Form-Submission-Solution.zip(12KB)