java-SSH2实现数据库和界面的分页
分页应该是在我们开发web应用时经常要做的工作,能够比较简洁的实现数据库和视图层的分页十分重要。
在数据库层利用hibernate进行数据库的分页,将从数据库中查询出的数据封装为javabean;在视图层就可以方便的实现分页。
创建PageBean
packagecom.fishing.common.bean; importjava.util.List; @SuppressWarnings("unchecked") publicclassPageBean{ privateListlist;//要返回的某一页的记录列表 privateintallRow;//总记录数 privateinttotalPage;//总页数 privateintcurrentPage;//当前页 privateintpageSize;//每页记录数 privatebooleanisFirstPage;//是否为第一页 privatebooleanisLastPage;//是否为最后一页 privatebooleanhasPreviousPage;//是否有前一页 privatebooleanhasNextPage;//是否有下一页 publicListgetList(){ returnlist; } publicvoidsetList(Listlist){ this.list=list; } publicintgetAllRow(){ returnallRow; } publicvoidsetAllRow(intallRow){ this.allRow=allRow; } publicintgetTotalPage(){ returntotalPage; } publicvoidsetTotalPage(inttotalPage){ this.totalPage=totalPage; } publicintgetCurrentPage(){ returncurrentPage; } publicvoidsetCurrentPage(intcurrentPage){ this.currentPage=currentPage; } publicintgetPageSize(){ returnpageSize; } publicvoidsetPageSize(intpageSize){ this.pageSize=pageSize; } /***/ /** *初始化分页信息 */ publicvoidinit(){ this.isFirstPage=isFirstPage(); this.isLastPage=isLastPage(); this.hasPreviousPage=isHasPreviousPage(); this.hasNextPage=isHasNextPage(); } /***/ /** *以下判断页的信息,只需getter方法(is方法)即可 * *@return */ publicbooleanisFirstPage(){ return(currentPage==1);//如是当前页是第1页 } publicbooleanisLastPage(){ returncurrentPage==totalPage;//如果当前页是最后一页 } publicbooleanisHasPreviousPage(){ returncurrentPage!=1;//只要当前页不是第1页 } publicbooleanisHasNextPage(){ returncurrentPage!=totalPage;//只要当前页不是最后1页 } /***/ /** *计算总页数,静态方法,供外部直接通过类名调用 * *@parampageSize *每页记录数 *@paramallRow *总记录数 *@return总页数 */ publicstaticintcountTotalPage(finalintpageSize,finalintallRow){ inttotalPage=allRow%pageSize==0?allRow/pageSize:allRow /pageSize+1; returntotalPage; } /***/ /** *计算当前页开始记录 * *@parampageSize *每页记录数 *@paramcurrentPage *当前第几页 *@return当前页开始记录号 */ publicstaticintcountOffset(finalintpageSize,finalintcurrentPage){ finalintoffset=pageSize*(currentPage-1); returnoffset; } /***/ /** *计算当前页,若为0或者请求的URL中没有"?page=",则用1代替 * *@parampage *传入的参数(可能为空,即0,则返回1) *@return当前页 */ publicstaticintcountCurrentPage(intpage){ finalintcurPage=(page==0?1:page); returncurPage; } }
在Dao的抽象接口BaseDao中添加方法:
publicListqueryForPage(finalStringhql,finalintoffset, finalintlength); 在Dao的实现类JianSheDWDaoImpl中实现方法 publicListqueryForPage(finalStringhql,finalintoffset, finalintlength){ Listlist=getHibernateTemplate().executeFind(newHibernateCallback(){ publicObjectdoInHibernate(Sessionsession) throwsHibernateException,SQLException{ Queryquery=session.createQuery(hql); query.setFirstResult(offset); query.setMaxResults(length); Listlist=query.list(); returnlist; } }); returnlist; }
在service抽象层接口JianSheDWService中添加方法:
publicPageBeanqueryForPage(intpageSize,intcurrentPage);
在service实现类中实现方法:
publicPageBeanqueryForPage(intpageSize,intpage){ finalStringhql="fromJianSheDWBean";//查询语句 intallRow=this.baseDao.getAllRowCount(hql);//总记录数 inttotalPage=PageBean.countTotalPage(pageSize,allRow);//总页数 finalintoffset=PageBean.countOffset(pageSize,page);//当前页开始记录 finalintlength=pageSize;//每页记录数 finalintcurrentPage=PageBean.countCurrentPage(page); List<JianSheDWBean>list=this.baseDao.queryForPage(hql,offset,length);//"一页"的记录 //把分页信息保存到Bean中 PageBeanpageBean=newPageBean(); pageBean.setPageSize(pageSize); pageBean.setCurrentPage(currentPage); pageBean.setAllRow(allRow); pageBean.setTotalPage(totalPage); pageBean.setList(list); pageBean.init(); returnpageBean; }
在视图层action中建立分页模型
packagecom.fishing.action.lcq; importcom.fishing.common.bean.JianSheDWBean; importcom.fishing.common.bean.PageBean; importcom.fishing.service.lcq.JianSheDWService; importcom.opensymphony.xwork2.ActionSupport; @SuppressWarnings("serial") publicclassGetInfoJSDWListActionextendsActionSupport{ privateintpage;//第几页 privatePageBeanpageBean;//包含分布信息的bean privateJianSheDWBeanjianSheDWBean; //privatePageBeanpage; privateJianSheDWServicejianSheDWService; publicintgetPage(){ returnpage; } publicvoidsetPage(intpage){ this.page=page; } publicPageBeangetPageBean(){ returnpageBean; } publicvoidsetPageBean(PageBeanpageBean){ this.pageBean=pageBean; } publicJianSheDWBeangetJianSheDWBean(){ returnjianSheDWBean; } publicvoidsetJianSheDWBean(JianSheDWBeanjianSheDWBean){ this.jianSheDWBean=jianSheDWBean; } publicJianSheDWServicegetJianSheDWService(){ returnjianSheDWService; } publicvoidsetJianSheDWService(JianSheDWServicejianSheDWService){ this.jianSheDWService=jianSheDWService; } @Override publicStringexecute()throwsException{ //分页的pageBean,参数pageSize表示每页显示记录数,page为当前页 this.pageBean=jianSheDWService.queryForPage(10,page); returnSUCCESS; } }
在jsp中编写分页
<trclass="odd"> <td> </td> <td> <s:iftest="%{pageBean.currentPage==1}"> 首页上一页 </s:if> <s:else> <ahref="jianguan/getJSDWInfos.action?page=1">首页</a> <a href="jianguan/getJSDWInfos.action?page=<s:propertyvalue="%{pageBean.currentPage-1}"/>"/>上一页</a> </s:else> </td> <td> <s:iftest="%{pageBean.currentPage!=pageBean.totalPage}"> <a href="jianguan/getJSDWInfos.action?page=<s:propertyvalue="%{pageBean.currentPage+1}"/>">下一页</a> <a href="jianguan/getJSDWInfos.action?page=<s:propertyvalue="pageBean.totalPage"/>">尾页 </a> </s:if> <s:else> 下一页尾页 </s:else> </td> <td> <divalign="center"> 页次 <s:propertyvalue="pageBean.currentPage"/> / <s:propertyvalue="pageBean.totalPage"/> 共 <s:propertyvalue="pageBean.allRow"/> 记录 </div> <divalign="center"></div> </td> </tr>
上面只是代码的实现,没有说明配置文件的配置,读者根据情况配置。
希望本文所述对你有所帮助,SSH2实现数据库和界面的分页内容就给大家介绍到这里了。希望大家继续关注我们的网站!想要学习java可以继续关注本站。