请教:关于避免F5刷新造成重复提交的一般性讨论
在SSH框架下做一个文件上传,然后显示文件列表的功能。发现提交之后,刷新文件列表会造成重复刷新,我把问题归结为:
1. request1 为带上传文件内容form的请求。其对应的path 为 upload.do
2. 在处理upload.do的Action中,上传完成后,转到列表显示功能的list.do(或者随便什么地方),但无论怎么转,最后只能返回需要的页面,却无法改变IE中地址栏中的“upload.do”,也就导致按F5会重复执行upload.do
3. 只有当response 返回客户端,才能通过javascript:parent.window.location='#' 来改变其url
以上是我理解的情况,也就是说当用户请求的url与返回的url不一致时,请求的url并不会自动改变。
请问有什么办法在服务器端设置IE地址栏么?使得response返回的时候url能自动改变。
[解决办法]
struts有一个禁止重复提交的东西,你可以试试
public ActionForward add(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
//前面的处理省略
saveToken(request);
return mapping.findForward("add");
}在Action的insert方法中,我们根据表单中的Token值与服务器端的Token值比较,如下所示:
public ActionForward insert(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
if (isTokenValid(request, true)) {
// 表单不是重复提交
//这里是保存数据的代码
} else {
//表单重复提交
saveToken(request);
//其它的处理代码
}
}
[解决办法]