0

いくつかの簡単なアクションがあります。

<action name="edit" class="EditAction">
  <result>/WEB-INF/jsp/form.jsp</result>
</action>

<action name="preview" class="PreviewAction">
  <result>/WEB-INF/jsp/preview.jsp</result>
  <result name="input">/WEB-INF/jsp/form.jsp</result>
</action>

<action name="store" class="StoreAction">
  <result>/WEB-INF/jsp/confirmation.jsp</result>
  <result name="input">/WEB-INF/jsp/preview.jsp</result>
</action>

<global-results>
  <result name="invalid.token">/WEB-INF/jsp/invalidToken.jsp</result>
</global-results>

および古典的なシナリオ: ユーザーはテキスト入力を操作し、[保存] を押し、プレビュー ページを表示し、[保存] を押してデータを保存します。ボタンを 2 回押したり、ページを更新したりする必要はありません。

このような状況で二重送信が発生するのはなぜですか?

4

1 に答える 1

1

ブラウザの更新時にstruts2で二重フォーム送信の問題が発生しました。post-redirect-get パターンを使用して問題を解決し、二重または重複したフォーム送信を回避しました。これは、POST リクエストに基づく応答に対して「ページの更新」を押すと、POST リクエストが再発行されるために発生します。ボタンを 2 回押しても、現在のページに到達するために行ったことを繰り返します。struts2 では、成功とエラーの両方で発生します。必要に応じてこの変更を行うことをお勧めします。

<action name="onStoreRedirect">
  <result name="success" type="redirect">store</result>
</action>

<action name="store" class="StoreAction">
  <result>/WEB-INF/jsp/confirmation.jsp</result>
  <result name="input">/WEB-INF/jsp/preview.jsp</result>
</action>
于 2012-12-18T09:11:02.710 に答える