public ActionForward init(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
            HttpServletResponse response) throws Exception {            //处理代码
            /* 加入令牌 */
            saveToken(request);
            /* 页面跳转目标 */
            return mapping.findForward(FORWARD_init);
     
}
public ActionForward saveFeedBackMess(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) {          //其他代码          /* 判断是否重复提交 */
                if (isTokenValid(request, true)) {
                        /* 保存的方法 */
                        bservice.saveFeedBackMess(lw);
                 } else {
                        log.info("重复提交");
                        saveToken(request);
                 
                 }         /* 页面跳转目标 */
        return mapping.findForward(FORWARD_init);}大家帮我看下这段代码有错吗?第一次提交是重复提交,我刷新也是重复提交?

解决方案 »

  1.   

    这种没处理过,我只知道如果页面有submit按钮的话,可以禁用表单的onSubmit()事件来禁止重复提交,不知道我说的对不对。楼下的请指点。
      

  2.   

    onclick事件提交,submit提交,<a href=""></a>提交都用过了,不管事。
      

  3.   

    补充一点:FORWARD_init 跳转页面是iframe镶嵌在另一个页面里的。
    <html>
    <head>
    </head>
    <body>
    <div>
    <!-- 其他代码 -->
    <table align="center" width="110%" >
    <iframe id="leavemessage" src="<%=path%>/leaveWordAction.do? method=init&pageCount=15&infoId=<%=id %>" name="leavemessage" frameborder=0 framespacing=0 width=100% height="1304" marginheight=0 marginwidth=0 noResize vspale="0" scrolling="no"></iframe>
    </table>
    </div></body>
    </html>
      

  4.   

    token需要reset一下,具体的方法我一子想不起来了。
    可能是resetToken吧。
    这样就可以解决你说的问题了
      

  5.   

    jsp页面还要加上一个包含Token的隐藏字段的。另外
     if (isTokenValid(request, true)) 
    还得resetToken
      

  6.   

    你只生成token并保存起来,并没有使用token
    首先,在iframe请求的url之后跟一个参数把token一并提交到后台
    然后,按照10楼所说验证TOKEN是否有效,再resettoken就可以了
      

  7.   

    刚才说错了,你把JSP页面提交部分的相关代码贴出来,或者自己检查一下表单提交的数据中有没有token相关的一串编码
      

  8.   

    谢谢大哥的意见,我恍然想到tooken是struts里机制自带的,而我这里不全是struts机制。我自己加了一个标示位,刷新还是重复提交,所打印出来的标示位相同,刷新时所提交的还是上次提交时的链接,所造成的重复提交,这个怎么解决呢?
      

  9.   

    查一查struts里边把token保存在session里边什么名称,然后把这个对象取出来放到你自己写的隐藏域就可以了
      

  10.   

    问题补充:现在的问题是提交后,然后刷新时与提交时的参数是一致的,加上tooken,刷新时的参数传递与提交时的参数还是一致的,根本没有变,刷新tooken的值也没有传过去。简单的说,提交与刷新时的传值是完全一致的。
      

  11.   

    可能是浏览器缓存问题,给你的iframe的src属性加一个时间戳参数,让每次请求的url不是完全一样就不会有问题了
      

  12.   

    iframe的src是没有问题的,iframe最终到达一个页面,在页面里有一个提交,这个提交与刷新时的参数是一样的,所以加不加时间戳是没有作用的
      

  13.   

    这时刷新的不是iframe,而是那个页面
      

  14.   

    你的代码在成功处理之后还是会跳到那个页面,那你在跳转之前再保存一下TOKEN应该就可以啦
      

  15.   

    你把你前台隐藏域的那个代码贴出来,是不是用org.apache.struts.action.TOKEN这个从session获取的?
      

  16.   

    不是,自己写的一个标示位而已,这个跟tooken没有关系了,是刷新的时候跟刷新前的链接所传的参数是一样的,所以你不管怎么传值,他所传的参数是一样的!
      

  17.   

    我好像想起来了,我原来做的时候,记得,那个表单好像必须用标签的形式
    如果你<html:form ...   应该可以如果你用Html的表单,直接form好像就不行,你可以试试
      

  18.   

    你再试试看,加上reset,换成标签,要是还不行,我只好回家给你试试了