1、是否在别的地方也用了setAttribute("tsList", tsit)?
2、“提交去另外一个formbean和actionbean处理完数据回去当前页面的”,是如何回来?如果回来还是用到了这个actionbean,说明又进行了一次tsdao.findAll(null, con),但这次的tsList是空的,又来了一次session.setAttribute("tsList", tsit);,所以前次的session已没用了,你的测试代码没问题也说明了这样的事实,解决的办法就是加一个判断,tsit数据不为空时才进行 ArrayList tsList = tsdao.findAll(null, con);
或者是tsdao和con每次都一样。

解决方案 »

  1.   

    谢谢回复人: kui(kui) 
    我刚开始搞jsp和struts,很多东西都不是很清晰,代码有点乱,
    我再好好地整理一下。在这里我是新人一个,谢谢指教!
      

  2.   

    你把tsList放到Request里,就不会出现这个问题了。
      

  3.   

    TO: hq1305018(跃强)
    因为我要2次跳转,用request不行。TO:kui
    1、检查过没有其他地方有setAttribute("tsList", tsit)
    2、其实业务流程是这样的:
    外面一个超连接直接到TopicAction(也就是setAttr的actionbean),连数据库拿4个表的数据,分别set4个session;在topic.jsp页面用4个html:select+options接收数据,这4个下拉框是用来多条件查询的,另外有一个html:form是单条件查询的,单条件和多条件分别有自己的formbean和actionbean,查询结果都是forward回topic.jsp。问题就在于,TopicAction只有第一次进入的时候才调用过,第一次显示topic。jsp时候正常,接着进行单条件和多条件查询,查询完毕forward回topic。jsp下拉框就没数据了。
    最奇怪的是我用第二段代码测试的时候是没问题的。请教一下,第一段代码和第二段代码有什么不同吗???
      

  4.   

    if ((session != null) && (session.getAttribute("tsList") != null)) 
    {
          TopicStorageDAOImpl tsdao=exam.getTopicStorageDAOImpl();
          ArrayList tsList = tsdao.findAll(null, con);
          Iterator tsit = tsList.iterator();
          session.setAttribute("tsList", tsit);
    }
      

  5.   

    tsdao.findAll(null, con);是不是每次都传回有数据的ArrayList呢?
      

  6.   

    if ((session != null) && (session.getAttribute("tsList") != null)) 
    {
          TopicStorageDAOImpl tsdao=exam.getTopicStorageDAOImpl();
          ArrayList tsList = tsdao.findAll(null, con);
     //     Iterator tsit = tsList.iterator();
          session.setAttribute("tsList", tsList);
    }
    把Iterator去掉,直接GET ARRAYLIST就可以了!
      

  7.   

    TO:回复人: danielmouse(daniel) 
    oh yeah!!!
    去掉Iterator就可以了。。
    这是为什么啊,可以详细说一下吗??
      

  8.   

    Iterator相当于只读游标,只能读一次,下次再读set回来的arraylist就没有东西可以读了