Struts 2 duplicate form submission handling

最近在研究 duplicate form submission,

發現原來 Struts 已經提供相關的功能,

可使用 token 的 interceptor來做.

真是太佩服了…

版本: struts+spring 2.0.6

Step1: 在相對應的 struts.xml, 針對要防止 double submission 的 action 加上 interceptor

<action name=”doModify” method=”doModify” class=”MyAction”>
<interceptor-ref name=”token”/>
<interceptor-ref name=”defaultStack”/>
<result name=”invalid.token“>error.jsp</result>
<result name=”success”>success.jsp</result>
</action>

Step2: MyAction class 需 extends ActionSupport (為了顯示 <s:actionerror/> 的值)

Step3: 在呼叫此 Action 的 JSP 的 Form tag 內, 加上 <s:token/>

Step4: 在 error.jsp 加上 <s:actionerror/>

PS: JSP 記得加 struts 的 taglib

如此一來,

當使用者因不耐煩多按了幾次 Submit,

或回上頁再重新 Submit,

或 Refresh 已Submit 的頁面,

都會被導向 error.jsp,

出現 The form has already been processed or no token was supplied, please try again. 的訊息.

(struts.messages.invalid.token 內容可改為自訂訊息)

Submit 的內容是以第一次為主,

之後的 submit 都無作用.

Advertisements