在用struts2.0標(biāo)簽開發(fā)中,經(jīng)常要使用form提交.
通常:
1)寫一個(gè)action類
此action類完成提交后的保存動(dòng)作.
2)寫一個(gè)靜態(tài)jsp頁(yè)面
寫form,以及輸入input,和提交button.
3)設(shè)置struts*****.xml文件
配置action名稱以及映射的類和返回結(jié)果名稱等.
問題:
在點(diǎn)擊"提交"后,我們通常會(huì)彈出一個(gè)提示信息的頁(yè)面,用戶此時(shí)有可能會(huì)按f5刷新當(dāng)前提交的action,從而將多個(gè)相同的數(shù)據(jù)保存到了后臺(tái)數(shù)據(jù)庫(kù),并且造成了潛在的安全危險(xiǎn)!
如何避免重復(fù)提交呢?
1) 用<s:token>!
如在輸入界面的jsp里,設(shè)置token標(biāo)志:
<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)寫一個(gè)名稱為NoBack.jsp的提示文件,當(dāng)重復(fù)f5刷新時(shí),將顯示本頁(yè)內(nèi)容,提示"不可重復(fù)提交,或者頁(yè)面已經(jīng)過期"

<s:token/>在最終生成頁(yè)面時(shí),自動(dòng)生成一個(gè)unique id,通過它攔截器才能知道頁(yè)面是否是同一次提交.
