7

こんにちは、いくつかのjspページがあり、struts2を使用してフォームを処理しています。ユーザーがフォームを送信した後、アドレス バーに表示される URL が somthing.action になるため、ユーザーがページを更新すると、フォームが再度送信されます。どうすればこれを処理できますか? フォームの送信後。

4

3 に答える 3

4

フォームの重複送信を防ぐことが目的の場合は、tokenインターセプターhttp://struts.apache.org/2.x/docs/token-interceptor.htmlまたはtokenSessionインターセプターhttp://struts.apache.org/2.x/を使用します。 docs/token-session-interceptor.html .

送信後に再度送信せずにページを更新するだけの場合は、フォームではなく結果のみを表示するアクションにリダイレクトします。redirectActionそのために結果を使用します。

于 2012-11-23T12:41:48.117 に答える
3

他の両方の答えに+1。

Post / Redirect / Getは、すべてのWebテクノロジーの古典的なパターンです。

Struts2を使用している場合、 TokenInterceptorは別の方法です。

古いブラウザやJavascriptが無効になっているブラウザとのレトロ互換性を気にしない場合は、3番目の方法があります。HTML5ですwindow.history.pushState

ページが読み込まれた後、URLを元のページにリセットするだけで、リクエストを再送信する代わりに、F5キーを押すと元のページが取得されます。

 $(document).ready(function() {
   window.history.pushState("","", "myOriginalUrlWithNoParams");
 });
于 2012-11-23T12:57:47.993 に答える
1

POST REDIRECT GET

更新時にフォームが再送信されないようにするには、このパターンに従う必要があります。これは、POSTリクエストを送信した後、を使用して宛先ページを取得するPOSTためのレスポンスを送信する必要があることを意味します。このパターンでは、ユーザーがページを更新すると、GET リクエストのみが再び発生するため、サーバーで何も更新せずに同じページがフェッチされます。REDIRECTGET

これは、Web で推奨される一般的なデザイン パターンです。Google は、これに関する多くのリソースを提供します。

于 2012-11-23T12:45:12.063 に答える