3

フォームをブラウザに送信すると、フォームが 2 回送信されます。アクセス ログには、同時に 2 つのリクエストが発生したことが示されています。2 つの異なるスレッドがそれを実行しています。

問題は、最初のリクエストにはユーザーが入力した属性値が含まれているのに対し、2 番目のリクエスト呼び出しにはリクエスト オブジェクトに null 値のみが含まれているということです。

この問題は常に発生するわけではありません.時々発生するだけで、まったく再現できません.IE8とIE9の両方で、これらの問題が発生しました.

なぜそれが起こるのか誰か知っていますか?

4

2 に答える 2

5

おそらく問題は、送信ボタンを使用していてdocument.forms[0].submit、javascriptonclickイベント ハンドラー内にあることです。

したがって、アクションは 2 回呼び出されます。

初めて

document.forms[0].submit

2回目

submit button action
于 2012-09-24T11:25:49.270 に答える
1

struts1またはstruts2を使用していますか?とにかく、どちらにも繰り返し送信を回避するメカニズムがあります:token。struts1の場合、最初のアクション(フォームページのアクション)でsaveToken()を呼び出す必要があり、strutsの「html:form」タグはこのトークンをページに自動的に追加します。送信アクション(取引フォームのアクション)で、isTokenValid(request、true)を呼び出します。これにより、ページとセッションからのトークンが検証されます。

struts2の場合、送信アクションのインターセプターrefトークンを追加し、フォームページに「s:token」タグを追加します。

上記のソリューションは、サーバー側での繰り返し送信を制限します。2番目のリクエストは例外を引き起こし、無効なリクエストとして処理されます。ただし、UI側でこれを制限する場合は、次のようなJavaScriptが必要です。送信ボタンをクリックしたときに無効にして、繰り返し送信されないようにします。

于 2012-06-18T11:19:36.107 に答える