問題: 今天在我做的項目中發(fā)現(xiàn)了這么一個現(xiàn)象:添寫完一個表單A的內(nèi)容,點擊下一步,進(jìn)行表單A的保存并跳轉(zhuǎn)到下個表單B,結(jié)果跳轉(zhuǎn)是跳轉(zhuǎn)過去了但是在表單B中鼠標(biāo)右鍵刷新的時候,A表單的請求會重新來這么一遍,所以導(dǎo)致數(shù)據(jù)庫里的數(shù)據(jù)多出來一條,可想而知在用戶使用的時候 多刷新幾次,然后結(jié)果就悲劇了。
1.在表單a的jsp中生成一個隨機(jī)數(shù),并放入session中
<%
double d = Math.random();
String flag = Double.toString(d);
session.setAttribute("flag",flag);
%>
2.在表單a中同時定義一個隱藏域,同樣用來保存這個隨機(jī)數(shù) 隨表單提交到后臺(也就是放在request中)
<input type="hidden" name="flag" value="<%=flag%>">
3.提交到后臺的action中,在action接收session中的變量和request中的變量, 然后進(jìn)行判斷 如果相等說明是正常點擊進(jìn)入的,在接下來的邏輯代碼中處理完正常邏輯然后記得把session中的值清空,這樣在跳轉(zhuǎn)到表單B的頁面時 在進(jìn)行刷新,刷新請求在重復(fù)執(zhí)行這段代碼,這時候session中的值已經(jīng)清空,和request中的值不相等,那么就是刷新的操作,就不用執(zhí)行插入語句了。
String flag =(String) req.getSession().getAttribute("flag");
String f = req.getParameter("flag");
if(f.equals(flag)){
req.getSession().removeAttribute("flag");
}
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。