特别声明:我是菜鸟。  需求描述:就是对数据库产生的新闻列表进行划页。一页只能显示15条信息(这个功能我已完成了),并且对多余的信息有翻页的功能。  困难:看了很多帖子,都是在jsp页面上对数据库进行操作。但是我的查询是利用BEAN来做的。  下面是我JSP页面上动态显示列表的代码:
  //newslist.jsp <%      Collection newsAll=newsBean.getNewsC("announce");
   Iterator it=newsAll.iterator();       /**
    * i的作用在于,控制列表的长度。
    */
   int i=0; 
   while(it.hasNext()&i<15){
    News temp=(News)it.next();
    out.println("<tr>");
    out.println("<td>"+temp.getNewsID()+"</td>");
    out.println("<td><a href='detail.jsp?newsID="+temp.getNewsID()+"'>"+temp.getTitle()+"</a></td>");
    out.println("<td>"+temp.getTimes()+"</td>");
    out.println("<td>【<a href='modNews.jsp?newsID="+temp.getNewsID()+"'>编辑</a>】</td>");
    out.println("<td>【<a href='delNews.jsp?newsID="+temp.getNewsID()+"'>删除</a>】</td>");
    out.println("</tr>");
    i++;
        }
       session.setAttribute("poniter",it);
         %>
  
   我的思路:列表的产生是通过it对象在信息条上往下一个一个移动完成查询的。所以我想,能不能通过对it对象的值控制而达到进行翻页效果呢?   我的尝试:我新建了一个newslist_next.jsp作为下一页翻页的链接。在newslist.jsp用 session.getAttribute("poniter",it);获得it对象,再将新的it用it.hasNext()循环语句在此页里执行下去 。这样确实没什么问题。可是……   麻烦来了:就是,我不可能事先做好N多的newslist_next.jsp来预备。如果你想说通过页面的自我调用来完成“下一页”的功能的话,对于newslist.jsp的传值当然只有第一次访问newslist_next.jsp才运行此代码。后面的newslist_next.jsp是不能运行这个代码的。
   还有就是往前翻,啊~~~我头都大了。   要是你看的头都大的话,那就把上面的话全部忘掉吧!请高手告诉我怎么才能不用修改BEAN里代码,只通过JSP或者事件或者JS来完成翻页吧~~~~
   =,=

解决方案 »

  1.   

    传递你需要查询的页数到newslist.jsp,再根据页数查询次页信息并显示出来!!
      

  2.   

    是的,先计算多少页,然后根据页数取当页要显示的数据,但不要把所有数据都取出来保存在Collection 或session里面,不然会很慢的,你需要哪页数据才去取那页的数据.
      

  3.   

    我昨天就是放在collection里,慢的要死。我还以为我的机器出了什么问题。今天来我做了一点改动:代码: <% 
       //获取当前页数
       int pageNum=0;
       if(request.getParameter("pageNum")==null){
         pageNum=1;
       }else{
         String pageN=request.getParameter("pageNum");
     pageNum=Integer.parseInt(pageN);
     if(pageNum<=0){
       throw new Exception("无上页");
     }
       }
       
       Collection newsAll=newsBean.getNewsC("announce");
       Iterator it=newsAll.iterator();
       Vector vec=new Vector();
       
       for(int x=1;x<pageNum;x++){
         for(int y=0;y<10&it.hasNext();y++){
    vec.add(it);
    // out.println(vec.isEmpty())  经过测试发现,不为空数组。
     }  
       }
       
       //第一次运行时候因为没有数据,所以必须设置条件
       if(!vec.isEmpty()){
         out.println(vec.lastElement());
         it=(Iterator)vec.lastElement(); //这个地方的地址没有变?!!我觉得很茫然
       }
           
       int listLeng=0; 
       while(it.hasNext()&listLeng<10){
        //import在page里已经引入了com.news.obj.*
        News temp=(News)it.next();
        out.println("<tr>");
        out.println("<td>"+temp.getNewsID()+"</td>");
        out.println("<td><a href='detail.jsp?newsID="+temp.getNewsID()+"'>"+temp.getTitle()+"</a></td>");
        out.println("<td>"+temp.getTimes()+"</td>");
        out.println("<td>【<a href='modNews.jsp?newsID="+temp.getNewsID()+"'>编辑</a>】</td>");
        out.println("<td>【<a href='delNews.jsp?newsID="+temp.getNewsID()+"'>删除</a>】</td>");
        out.println("</tr>");
        listLeng++;
            }

    out.println("<tr><td colspan='5' align='right'> <br /><a href='VAnnounce.jsp?pageNum="+(pageNum-1)+"'>上一页</a>  ||  <a href='VAnnounce.jsp?pageNum="+(pageNum+1)+"'>下一页</a> </td></tr>"); %>it并不是局部变量啊~~为什么地址没有变呢?
      

  4.   

    呵呵~~问题解决了。
    我错在以为it.hasNext()后地址就变化了,结果是it.next的作用。
    谢谢2楼的回答。给分。。