在用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" οnclick="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,通過它攔截器才能知道頁面是否是同一次提交.