问题描述
请教论坛各位大神~~~~~~如题所示,我JSP页面一开始能正常显示表头和表中数据,如图:但是,一旦按了下一页或者上一页,就会出问题了,问题就是表头会不断增加、表中数据只会显示当前页的第一行数据。如图所示:具体代码如下packageuser.yourservlet;importuser.yourbean.Main;importcom.sun.rowset.*;importjava.sql.*;importjava.io.*;importjavax.servlet.*;importjavax.servlet.http.*;publicclassHandleMainPageextendsHttpServlet{intfieldNum;CachedRowSetImplrowSet=null;publicvoidinit(ServletConfigconfig)throwsServletException{super.init(config);//加载MySQL的Java数据库驱动程序try{Class.forName("com.mysql.jdbc.Drvier");}catch(Exceptione){}}publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{Connectioncon;StringBufferpresentPageResult=newStringBuffer();MainqueryBean=null;HttpSessionsession=request.getSession(true);try{queryBean=(Main)session.getAttribute("query");if(queryBean==null){queryBean=newMain();session.setAttribute("query",queryBean);}}catch(Exceptionexp){queryBean=newMain();session.setAttribute("query",queryBean);}//Stringps=request.getParameter("pageSize");//if(ps!=null)//{//try{//intmm=Integer.parseInt(request.getParameter("pageSize"));//queryBean.setPageSize(mm);//}//catch(NumberFormatExceptionexp){queryBean.setPageSize(2);//}////}intshowPage=queryBean.getShowPage();intpageSize=queryBean.getPageSize();Stringuri="jdbc:mysql://localhost/jim";try{con=DriverManager.getConnection(uri,"root","asd1234");DatabaseMetaDatametadata=con.getMetaData();ResultSetrs1=metadata.getColumns(null,null,"book",null);intk=0;Stringfield[]=newString[100];while(rs1.next()){fieldNum++;field[k]=rs1.getString(4);k++;}StringBufferstr=newStringBuffer();str.append("<tr>");for(inti=0;i<fieldNum;i++)str.append("<th>"+field[i]+"</th>");str.append("</tr>");queryBean.setFormTitle(str);Stringcondition="select*frombook";PreparedStatementpre=con.prepareStatement(condition);ResultSetrs=pre.executeQuery();rowSet=newCachedRowSetImpl();rowSet.populate(rs);con.close();queryBean.setRowSet(rowSet);rowSet.last();intm=rowSet.getRow();intn=pageSize;intpageAllCount=((m%n)==0)?(m/n):(m/n+1);queryBean.setPageAllCount(pageAllCount);}catch(SQLExceptionexp){}StringwhichPage=request.getParameter("whichPage");if(whichPage==null||whichPage.length()==0){showPage=1;queryBean.setShowPage(showPage);CachedRowSetImplrowSet=queryBean.getRowSet();if(rowSet!=null){presentPageResult=show(showPage,pageSize,rowSet);queryBean.setPresentPageResult(presentPageResult);}}elseif(whichPage.equals("nextPage")){showPage++;if(showPage>queryBean.getPageAllCount())showPage=1;queryBean.setShowPage(showPage);CachedRowSetImplrowSet=queryBean.getRowSet();if(rowSet!=null){presentPageResult=show(showPage,pageSize,rowSet);queryBean.setPresentPageResult(presentPageResult);}}elseif(whichPage.equals("previousPage")){showPage--;if(showPage<=0)showPage=queryBean.getPageAllCount();queryBean.setShowPage(showPage);CachedRowSetImplrowSet=queryBean.getRowSet();if(rowSet!=null){presentPageResult=show(showPage,pageSize,rowSet);queryBean.setPresentPageResult(presentPageResult);}}queryBean.setPresentPageResult(presentPageResult);RequestDispatcherdispatcher=request.getRequestDispatcher("showMain.jsp");dispatcher.forward(request,response);}publicStringBuffershow(intpage,intpageSize,CachedRowSetImplrowSet){StringBufferstr=newStringBuffer();try{rowSet.absolute((page-1)*pageSize+1);//rowSet.relative(-1);for(inti=1;i<=pageSize;i++){str.append("<tr>");for(intk=1;k<=fieldNum;k++)str.append("<td>"+rowSet.getString(k)+"</td>");str.append("</tr>");rowSet.next();}}catch(SQLExceptionexp){}returnstr;}publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{doPost(request,response);}}
解决方案
解决方案二:
这个要晒晒你的前台代码
解决方案三:
楼主真不容易啊,写了这么复杂的分页。换一种分页思路试试吧
解决方案四:
你把展现层的代码都塞到业务逻辑层去了。不建议这么干。分页最好用分页模板类的方法,网上很多例子的
解决方案五:
肯定是有模块的重复调用,嵌套了看看你前台的代码吧
解决方案六:
你的页面肯定有问题。是用jsp去显示的吧。
解决方案七:
引用3楼defonds的回复:
你把展现层的代码都塞到业务逻辑层去了。不建议这么干。分页最好用分页模板类的方法,网上很多例子的
因为我还只是刚初学简单的jsp+servlet+javabean的MVC,而且最近时间有点紧,暂时还看不懂网上用其他方法的例子TT
解决方案八:
引用4楼yemubai的回复:
肯定是有模块的重复调用,嵌套了看看你前台的代码吧
<%@pagecontentType="text/html;charset=GB2312"%><%@pageimport="user.yourbean.Main"%><html><center><body><jsp:useBeanid="query"class="user.yourbean.Main"scope="session"/><tableborder="2">分页后总页数<jsp:getPropertyname="query"property="pageAllCount"/>当前页码<jsp:getPropertyname="query"property="showPage"/>每页显示记录数<jsp:getPropertyname="query"property="pageSize"/><jsp:getPropertyname="query"property="presentPageResult"/></table><table><tr><td><formaction="helpQuery"method="post"><inputtype="hidden"value="<%=query.getShowPage()-1%>"name="showPage"><inputtype="submit"value="上一页"name="submit"></form></td><td><formaction="helpQuery"method="post"><inputtype="hidden"value="<%=query.getShowPage()+1%>"name="showPage"><inputtype="submit"value="下一页"name="whichPage"></form></td></tr></table></body></center></html>
就是这个jsp
解决方案九:
我也是有类似代码,但是我是只有列名,没有记录也
解决方案十:
getPresentPageResult()没处理好