今天为处理防止用户刷新页面二重复提交数据使用了重定向的方法,因为只用了JSTL没用Struts1.x自带的标签,所以没有用Token,因此采用这种方式处理重复提交.
当然af.setRedirect(true)后http得到新的请求request也就没有参数了.
我要转到的是另一个Action来处理,而那个Action要获得一些参数才会执行一些功能,如查询数据等..
所以我这么做:
ActionForward af = new ActionForward();
af.setPath("webUrl.do?command=anQuestion&id=" + id + "&che=" + che);
af.setRedirect(true);
return af;
这样之后发现没有得到che的值,而且提交时浏览器响应很慢,后来发现是只为che是中文,当是中文时IE8是得不到che的值,FF3.09中得到的是乱码,英文则没有事.
所用的所有编码全是UTF-8的,这什么setPath()会出现如此奇怪的问题?而且在不同浏览器表现不一??我知道FF在处理URL时用的是UTF-8,可是IE这何得不到值,响应为何如此慢??

解决方案 »

  1.   

    还是 url编码问题 
    统一编码!
    顶!
      

  2.   

    String path = webUrl.do?command=anQuestion&id=" + id + "&che=" + che;
    path = URLEncoder.encode(path,"UTF-8");
      

  3.   


     已经有过虑器了,已经统一编码了..
    而且这样做直接报URL不存在了..
      

  4.   

    af.setRedirect(true);
    你这样是页面重定向了 不是同一个请求了  取不到要流浪的url所以超时
      

  5.   


    你注意我path后能参数,而且是一个Action,所以URL就是带参数值的path,这样一来就会转向action,当然会得到值,现在问题是中文为什么得不到..
      

  6.   

    final void addParam(String name, String value) {
    if (value != null) {
    uri.append(params == 0 ? '?' : '&')
                               //URLEncoder.encode(value,   "UTF-8")是否使用看着办吧!
       .append(name).append('=').append(value);    params++; } else {

    String[] values = pageContext.getRequest().getParameterValues(name); if (values != null) {

    for (int i = 0, l = values.length; i < l; i++) {
    value = values[i];
    uri.append(params == 0 ? '?' : '&')
                                              //URLEncoder.encode(value,   "UTF-8")是否使用看着办吧!
       .append(name).append('=').append(value); params++;
    }
    }
    }
    }对tomcate 配置URL编码!
      

  7.   

    PS:--页面第二次提交时采用重定向方法
    根据LZ的情况;我的方案&che=" + che去掉是在request中放一个值是把就和 查询输入框中查询  而查询的关键字依然保留页面刷新(没有应查询而为空)是一样的道理
    <%   
          String data ="";   
          if   (request.getParameter("flag")!= null)   {   
          
                data=String.valueOf((Integer.valueOf((String)request.getParameter("flag")))+1);   
          }    
          if(Integer.parseInt(request.getParameter("flag"))>=1){
               //重复提交了
          }   
       %>
       <input  type="hidden" name="flag" value="<%=data%>">//flag为form的一个属性初始为0
      

  8.   


    不是从表单得的值,是从业务处理那得的che..
      

  9.   

    LZ:因为只用了JSTL没用Struts1.x自带的标签,所以没有用Token,因此采用这种方式处理重复提交----${sessionScope.falg} 在 session里放个值来标志算了 页面没关Session还在
    //p--为跳到该页面之前Session里的一个key值 <c:set var="falg" value="${p}" scope="session"/>
    //提交一次 sessionScope.falg设置 二次判断如下
    ------------------------------------------------------<c:if test="${sessionScope.falg}!=null || sessionScope.falg}!=''}">
    //不提交
    </c:if><c:if test="${sessionScope.falg==null || sessionScope.falg==''}">
    <c:set var="falg" value="${p}" scope="session"/>
    //提交
    </c:if>
      

  10.   

    深圳JAVA J2EE QQ①群 32763598 深圳JAVA J2EE QQ②群  6086837 
    欢迎深圳的JAVA程序员加入,共同探讨技术与工作、项目合作、共享信息、结交朋友  
      加入请输入验证信息:SZJP
      

  11.   

    没有人讲讲setPath()的原理??
    有没有详解啊..
    深入讲解之类的..