向数据库提交记录成功后。刷新页面又会出现相同的记录,请教高手!

解决方案 »

  1.   

    你说的是struts2吧。用令牌环的方法,拦截器:token
      

  2.   

    用Token
    一般通过Html表单往数据库里插入数据,都会经过两步:
    第一步是通过get方法调出form表单页面;
    第二步是通过post方法将数据送到数据库;控制器示例代码:
    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {
    if("GET".equalsIgnoreCase(request.getMethod()){
    saveToken(request);//生成一张令牌
    return mapping.findForward("form");//返回到带form表单jsp页面
    }
    if(!this.isTokenValid(request, true)){//检查令牌
    request.setAttribute("message", "非法提交!");
    return mapping.findForward("message");//返回到消息页面
    }
    orm.save(obj);//保存
    return mapping.findForward("success");//返回到成功页面
    }要注意的是,jsp页面上的form表单要用Struts的<html:form>标签
      

  3.   

    用 struts的令牌。token, 你百度一下就可以了。其实我还有一个方法 ,也可以的。
    提交页面时,在session中put一个值(任意值,我自己一般put 当前session的ID)。
    action中再进行判断,就可以了,代码就不写了。 
      

  4.   

    在struts2中使用是非常方便的。
      

  5.   

    如果是struts2我觉得应该是你的返回类型有问题,对于跳转之前的action保存了,这个地方的跳转要用redirect
    也就是在struts2中result里面加 type="redirect"
      

  6.   

    你所说的重复提交是在带有表单的界面上 连续点两次提交吗?可以点一次提交之后就出发脚本,将按钮灰死 不能再点了。还有 就是上面所有的 token。
      

  7.   


    <s:token/>   解决比较好!!!!!!!
      

  8.   

    添加一条记录后 本人建议使用重定向跳转到你要显示的页面, 有更好的方法在讨论。
    原因是:因为添加一条记录后 使用转发,地址栏地址不变,而且使用struts填充数据
    转发后数据任然存在,所有当你刷新后等于又重新提交了一次。
      

  9.   

    没用过stucts,不过通过session也能解决重复提交的问题
      

  10.   

    原理:
        1、跳转到操作页面之前(例如新增记录页面),在服务器端生成一个键值对,并相应的保存到session中,该键值对中的值通常以时间参照来生成,这样保证每次生成的值不同,生成键值对并保存到session后,并通过request传到jsp等前台页面作为隐藏域保存到页面;
        2、等前台插入操作提交后,该键值对也作为参数和值传到后台服务器,所以在插入逻辑操作前判断,该键对应的值(从前台传过来的)是否与session中的匹配,如果匹配说明是正常插入,不是刷新操作,因为每次都要产生新的值。如果不匹配,说明是刷新操作,因为刷新是完全重复上次的操作(包括所有的参数和值)。
    具体代码有很多,你可以查一下,要是还没有看明白可以联系我,呵呵
      

  11.   

    两种情况:
    1、如果你添加完表单数据后,要跳转到新页面,但是不需要传递参数,那你在Action中的跳转方式用response.sendRedirect(""); 因为该方式跳转将不能传递参数
    2、如果要跳转到新页面,并且要传递参数,则要用同步器令牌(token).