特别声明:我是菜鸟。 需求描述:就是对数据库产生的新闻列表进行划页。一页只能显示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来完成翻页吧~~~~
=,=
//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来完成翻页吧~~~~
=,=
//获取当前页数
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并不是局部变量啊~~为什么地址没有变呢?
我错在以为it.hasNext()后地址就变化了,结果是it.next的作用。
谢谢2楼的回答。给分。。