在用struts2.0標簽開發中,經常要使用form提交.
通常:
1)寫一個action類
此action類完成提交后的保存動作.
2)寫一個靜態jsp頁面
寫form,以及輸入input,和提交button.
3)設置struts*****.xml文件
配置action名稱以及映射的類和返回結果名稱等.
問題:
在點擊"提交"后,我們通常會彈出一個提示信息的頁面,用戶此時有可能會按f5刷新當前提交的action,從而將多個相同的數據保存到了后臺數據庫,并且造成了潛在的安全危險!
如何避免重復提交呢?
1) 用<s:token>!
如在輸入界面的jsp里,設置token標志:
<form name="myname" action="myaction.do" method="post">
<input type="text" name="stuName" value="" .../>
... ...
<s:token/>
<input type="button" onclick="mymethod(this.form);" .../>
</form>
2) 在struts****.xml文件里配置攔截器:
<!-- 保存 -->
<action name="Save"
class="com.yourcom.app.Action.Dataform.saveAction"
method="Save">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="token" />
<result name="invalid.token">/Info/NoBack.jsp</result>
</action>
3)寫一個名稱為NoBack.jsp的提示文件,當重復f5刷新時,將顯示本頁內容,提示"不可重復提交,或者頁面已經過期"

<s:token/>在最終生成頁面時,自動生成一個unique id,通過它攔截器才能知道頁面是否是同一次提交.
