关于spring的重复提交问题啊!有人知道怎么解决吗?

nil2000 2008-01-09 12:11:03
重复提交定义:
A.JSP提交给xxx.do<执行insertDB()方法>,然后迁移到B.JSP,由于采用的是forward,所以IE上的URL还是
xxx.do,这时点刷新,就会在执行一次,执行insertDB()方法.


我的解决办法是:
在A.JSP上,将当前系统时间放入,一个hidden的文本框,同时放入Session。
然后在CLASS里面,获取这两个值如果一样就说明不是重复提交,并且将新的时间
放入session.代码如下:

<%
long _nowtime = System.currentTimeMillis();
session.setAttribute("sessiontime",_nowtime);

%>
<INPUT type='hidden' name='sessiontime' value='<%=_nowtime%>'>

然后再insertDB()里
String strTicketA = request.getParameter("sessiontime");
Long strTicketB = (Long) request.getSession().getAttribute("sessiontime");
if (strTicketA.equals(strTicketB.toString()))
{
Map _map = DAO.insertDB()//调用DAO层的方法
request.getSession().setAttribute("sessiontime",System.currentTimeMillis());
return new ModelAndView(movePage, Config.PAGEVIEW, _map);
}
else
return new ModelAndView(movePage, Config.PAGEVIEW, null);


我的问题是
1.这样写冗余太多啊,几乎每个方法都要写类似的判断代码。怎么能抽出来呢?
2.如果是重复提交,我就希望画面仍旧维持原样,怎么能如果是重复提交就维持原来
的画面呢?即:
return new ModelAndView(movePage, Config.PAGEVIEW, null);
这里我怎么写能维持原样呢?
...全文
1985 68 打赏 收藏 转发到动态 举报
写回复
用AI写文章
68 条回复
切换为时间正序
请发表友善的回复…
发表回复
myair2006 2008-05-23
  • 打赏
  • 举报
回复
我也遇到了
cpoysy 2008-04-23
  • 打赏
  • 举报
回复
我同意使用令牌机制,毕竟令牌机制是一种大众可行的方法,也是用得比较多的.
xql80329 2008-04-02
  • 打赏
  • 举报
回复
没说的 就是老紫竹方法 我们项目组上就是用这种方法 简单好用
  • 打赏
  • 举报
回复
学习了,遇到才能解决
nil2000 2008-04-01
  • 打赏
  • 举报
回复
改成

if (isMultiSubmit(request, recordKey)) {
//返回错误提示页
return new ModelAndView("record.jsp", "record", record);
} else {

不就行了么



record那里得到的啊?怎么得到的啊?
nil2000 2008-04-01
  • 打赏
  • 举报
回复
sendRedirect("b.jsp");把要的参数传过来
效率很低级啊
胡矣 2008-03-28
  • 打赏
  • 举报
回复
类似三楼的方法不行吗?
sendRedirect("b.jsp");把要的参数传过来
胡矣 2008-03-28
  • 打赏
  • 举报
回复
<%
long _nowtime = System.currentTimeMillis();
session.setAttribute("sessiontime",_nowtime);

%>
<INPUT type='hidden' name='sessiontime' value=' <%=_nowtime%>'>

LZ这样真的有用吗?这样刷新的话,不是每次都执行,那这两个值不是一直相同吗?
bt_lose 2008-03-26
  • 打赏
  • 举报
回复
http://blog.csdn.net/bt_lose/archive/2008/02/28/2129830.aspx
zuoguodang 2008-03-18
  • 打赏
  • 举报
回复
你利用一个隐藏表单域来标识session,在提交后你可以把那个值存到session里,进行逻辑判断即可。
GXZheng1985 2008-03-18
  • 打赏
  • 举报
回复
我用ajax提交的

控制器中采用cookie+md5判断是不是重复提交解决
dpf5212 2008-03-13
  • 打赏
  • 举报
回复
试了一下,效果不是太好
dasenlin85711 2008-02-29
  • 打赏
  • 举报
回复
还是感觉同步令牌机制的解决方案好一些.
babyone0538 2008-02-29
  • 打赏
  • 举报
回复
看看这个网站 www.xun-ku.cn 吧,绝对能找到你想要的,提供计算机教学视频的网站,是网上最大的计算机教学视频网站了,速度极快,

还可以留言找自己想要的视频呢!希望对你有所帮助!!!我的QQ:276939758.学生建站不容易,希望大家支持!!
睿音 2008-02-29
  • 打赏
  • 举报
回复
好帖子,收录下~~~
刘彬彬 2008-02-18
  • 打赏
  • 举报
回复
冒是很复杂的一个问题啊?
jyh149129 2008-02-03
  • 打赏
  • 举报
回复
要求不能用重定向么?
nil2000 2008-02-03
  • 打赏
  • 举报
回复
改成

if (isMultiSubmit(request, recordKey)) {
//返回错误提示页
return new ModelAndView("record.jsp", "record", record);
} else {

那怎么知道哪个页面是来源页?用 String reUrl = request.getHeader("Referer");吗?


您是这个意思吗?

if(isMultiSubmit(request,recordKey)) {
//返回错误提示页
String reUrl = request.getHeader("Referer");
Map viewMap = reUrl 页当前的数值?
return new ModelAndView("record.jsp", "viewMap", viewMap);
}
dreamover 2008-02-02
  • 打赏
  • 举报
回复
改成

if (isMultiSubmit(request, recordKey)) {
//返回错误提示页
return new ModelAndView("record.jsp", "record", record);
} else {

不就行了么
nil2000 2008-02-02
  • 打赏
  • 举报
回复
//根据令牌判断是否重复提交
if (isMultiSubmit(request, recordKey)) {
//返回错误提示页
return new ModelAndView("error.jsp", "tip", "你重复提交了!");


可是这样只是返回了错误页!而不是原封不动的,返回重复提交的哪个页
!如果用户每次重复刷新都返回错误页的话..感觉不是很人性化
加载更多回复(43)

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧