主要是為了解決在頁面中提交表單後,用戶再次刷新會重復提交的問題。
在解決此問題使用過以下幾種方法:
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.   

    给个状态字段吧
    在action里判断下
    如果是再次提交就清楚
    request里的东西我是这么做的
      

  2.   

    加个
    int i;
    System.out.println("*****************"+i+"********************");
    i++;
    这样应该可以判断是否重复提交吧!
      

  3.   

    Struts中有同步令牌机制,可以解决重复提交的问题。呵呵。
      

  4.   

    楼主看来是个新人,顺便提几点哦:1、不建议使用session的getValue()及setValue()方法,取而代之的是getAttribute与setAttribute()2、在Java中比较字符串,不要使用==,而要使用equals()方法。比如,pagestate=="Over"要改为:
        "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;  
      } 
      

  5.   

    这里有一篇介绍Struts同步令牌机制的文章,很详细哦,呵呵。
    点击阅读
      

  6.   

    問題已經解決,可以在struts-config.xml中進行配置將Action的<forward redirect="true"/>這樣即可實現response.sendRedirect("url")請求重定向。至於重復提交還最好的方法還是得使用令牌機制。謝謝各位!
      

  7.   

    問題已經解決,可以在struts-config.xml中進行配置將Action的<forward redirect="true"/>這樣即可實現response.sendRedirect("url")請求重定向。至於重復提交還最好的方法還是得使用令牌機制。謝謝各位!