request.setAttribute(SEARCHRESULT, list);这个是在哪儿写的?具体代码?应该是没注意线程安全问题造成的

解决方案 »

  1.   

    代码写在Action中 
    BaseForm thisForm = (BaseForm) form;
    // 获取分页数据,放入到请求中
    Pager page = new Pager(thisForm.getCurrentPageNo());
    request.setAttribute(PAGER, page);
    // 获取查询结果列表,放入到请求中 // 动态构建业务对象和业务方法
    BaseBO bo = BOFactory.createBO(thisForm.getModelParam()
    .getBoClass());
    List list = new ArrayList();
    String sql = getSelectSQL();
    if (!"".equals(sql)) {
    list = bo.list(page, sql);
    }
    session.setAttribute(SEARCHRESULT, list);
    // 返回到列表页面
    return mapping.findForward(LIST);
    设置后就直接返回页面了
      

  2.   

    session.setAttribute(SEARCHRESULT, list);
    ========================================Cannot find bean: "searchresult" in scope: "request"
    ====================================================一个是session一个是request,这里就有问题
      

  3.   

    错了,不好意思,我怀疑是struts多次转发,request失效造成的,因此把request 都改成了session.
    之前都是request,改称session后,没有报上面的错误
      

  4.   

    但是为什么request报错,如果是转发,是什么原因造成它再次转发,request失效呢?放在session中会造成内存消耗太大。大家给指点一下啊!!!!!!!!!1
      

  5.   

    session.setAttribute(SEARCHRESULT, list);
    ========================================Cannot find bean: "searchresult" in scope: "request"
    ????????????
      

  6.   

    以下面代码为准
    代码为
    代码写在Action中 
    BaseForm thisForm = (BaseForm) form;
    // 获取分页数据,放入到请求中
    Pager page = new Pager(thisForm.getCurrentPageNo());
    request.setAttribute(PAGER, page);
    // 获取查询结果列表,放入到请求中// 动态构建业务对象和业务方法
    BaseBO bo = BOFactory.createBO(thisForm.getModelParam()
    .getBoClass());
    List list = new ArrayList();
    String sql = getSelectSQL();
    if (!"".equals(sql)) {
    list = bo.list(page, sql);
    }
    request.setAttribute(SEARCHRESULT, list);
    // 返回到列表页面
    return mapping.findForward(LIST);页面代码为:<logic:iterate id="unit" name="searchresult" scope="request">
     
    最新的测试信息表明,在请求返回页面后进行了二次提交。但为什么会有二次提交呢?为什么人少时可以正常执行?
      

  7.   

    jdk是什么版本
    如果是1.3运行不了request.setAttribute()的
      

  8.   

    jdk没有问题,单用户运行没有问题,问题出在多用户并发访问上
      

  9.   

    终于找到原因了,问题出在程序设计上。
    我们的程序中用为了减少参数的传递,把ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response这四个参数放在了Action的全局变量中,问题就出在这里。
    经测试发现对于Action的基类(我的程序中是BaseAction),在大量用户并发访问时,只有一个实例,而每个子模块有一个Action实例(如UnitActrion,PersonAction)。多个用户使用一个Action实例,必然存在全局变量被不同的用户改写的问题。
    我程序的问题就是,用户A查询后将结果放在request中,然后到页面去接收,在而在其到页面接收之前。Action处理用户B的请求,将b全局变量中的request指向用户b的请求,结果就导致用户A到页面后去request中取查询结果时,无法找到。struts本身的请求处理都传递了上面的四个参数,这就保证了不同用户使用自己的request信息。我因图生事将传递的参数去掉,致使出现系统的不稳定。希望我的结论能给有类似问题的朋友有所帮助!