こんにちは、いくつかのjspページがあり、struts2を使用してフォームを処理しています。ユーザーがフォームを送信した後、アドレス バーに表示される URL が somthing.action になるため、ユーザーがページを更新すると、フォームが再度送信されます。どうすればこれを処理できますか? フォームの送信後。
3 に答える
フォームの重複送信を防ぐことが目的の場合は、token
インターセプターhttp://struts.apache.org/2.x/docs/token-interceptor.htmlまたはtokenSession
インターセプターhttp://struts.apache.org/2.x/を使用します。 docs/token-session-interceptor.html .
送信後に再度送信せずにページを更新するだけの場合は、フォームではなく結果のみを表示するアクションにリダイレクトします。redirectAction
そのために結果を使用します。
他の両方の答えに+1。
Post / Redirect / Getは、すべてのWebテクノロジーの古典的なパターンです。
Struts2を使用している場合、 TokenInterceptorは別の方法です。
古いブラウザやJavascriptが無効になっているブラウザとのレトロ互換性を気にしない場合は、3番目の方法があります。HTML5ですwindow.history.pushState
。
ページが読み込まれた後、URLを元のページにリセットするだけで、リクエストを再送信する代わりに、F5キーを押すと元のページが取得されます。
$(document).ready(function() {
window.history.pushState("","", "myOriginalUrlWithNoParams");
});
POST REDIRECT GET
更新時にフォームが再送信されないようにするには、このパターンに従う必要があります。これは、POST
リクエストを送信した後、を使用して宛先ページを取得するPOST
ためのレスポンスを送信する必要があることを意味します。このパターンでは、ユーザーがページを更新すると、GET リクエストのみが再び発生するため、サーバーで何も更新せずに同じページがフェッチされます。REDIRECT
GET
これは、Web で推奨される一般的なデザイン パターンです。Google は、これに関する多くのリソースを提供します。