主要是為了解決在頁面中提交表單後,用戶再次刷新會重復提交的問題。
在解決此問題使用過以下幾種方法:
1.在頁面的JavaScript中直接加入提交狀態值去判斷的辦法,但是對於F5刷新無效。
2.在頁面右加入session.putValue("pagestate","*.jsp");
然後在Struts的Action中--
HttpSession session=request.getSession();
session.getValue("pagestate");
if(pagestate=="Over")
{
//映射至錯誤頁面
return mapping.findForward("error");
}
else
{
session.putValue("pagestate","Over");
//....再執行其它業務
//最後映射至原頁面
return mapping.findForward("原頁面映射");
}
這種辦法(2)也行不通,mapping.findForward應該是使用的請求重定向,因此刷新後還是會重復提交。
3.想使用response.sendRedirect("url")來進行響應轉發,但是會報錯(Unreachable code)哪位大蝦有解決的辦法?
在解決此問題使用過以下幾種方法:
1.在頁面的JavaScript中直接加入提交狀態值去判斷的辦法,但是對於F5刷新無效。
2.在頁面右加入session.putValue("pagestate","*.jsp");
然後在Struts的Action中--
HttpSession session=request.getSession();
session.getValue("pagestate");
if(pagestate=="Over")
{
//映射至錯誤頁面
return mapping.findForward("error");
}
else
{
session.putValue("pagestate","Over");
//....再執行其它業務
//最後映射至原頁面
return mapping.findForward("原頁面映射");
}
這種辦法(2)也行不通,mapping.findForward應該是使用的請求重定向,因此刷新後還是會重復提交。
3.想使用response.sendRedirect("url")來進行響應轉發,但是會報錯(Unreachable code)哪位大蝦有解決的辦法?
在action里判断下
如果是再次提交就清楚
request里的东西我是这么做的
int i;
System.out.println("*****************"+i+"********************");
i++;
这样应该可以判断是否重复提交吧!
"Over".equals( pagestate )3、虽然最好的解决方案是同步令牌机制,但如果你一定要使用第2种办法或第3种办法,也是可以的。第2种办法,你可以把<forward>配置中的redirect设置为true,这样就是重定向啦。第3种办法应该是你代码写得有问题,试着改成这样: HttpSession session=request.getSession();
Object pagestate = session.getAttribute("pagestate");
if( "Over".equals( pagestate ) )
{
//映射至錯誤頁面
return mapping.findForward("error");
}
else
{
session.setAttribute("pagestate","Over");
//....再執行其它業務
//最後映射至原頁面
response.sendRedirect("url");
return null;
}
点击阅读