

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