JSP分页导航简单封装

来源:互联网 发布:反清复明 知乎 编辑:程序博客网 时间:2024/05/22 01:37

数据量大了就需要进行分页,分页主要使用四个参数

RecordCount  总记录条数 这个基本上是固定的(条件确定后)

PageSize 页大小 这个可以根据自己的需要进行调

PageCount 总页数 上面两个确定这个基本确定

PageIndex 当前页码 这个是可以进行变化的,取值范围0到PageCount-1之间

这是分页的基本思想,在JSP中使用我们可以通过一个PageVo类对分页的导航进行简化处理,

我设计了这样一个分页辅助类:

PageVo.java

public class PageVo {private int recordCount;private int pageSize;private int pageCount;private int pageIndex;public int getRecordCount() {return recordCount;}public void setRecordCount(int recordCount) {this.recordCount = recordCount;}public int getPageSize() {return pageSize;}public void setPageSize(int pageSize) {this.pageSize = pageSize;}public int getPageCount() {return pageCount;}public void setPageCount(int pageCount) {this.pageCount = pageCount;}public int getPageIndex() {return pageIndex;}public void setPageIndex(int pageIndex) {this.pageIndex = pageIndex;}public PageVo(int recordCount, int pageSize, int pageCount, int pageIndex) {super();this.recordCount = recordCount;this.pageSize = pageSize;this.pageCount = pageCount;this.pageIndex = pageIndex;}}


封装了上面四个变量,写了一个构造函数

数据访问层类使用这个辅助类

NewsDaoImpl.java

 

public class NewsDaoImpl extends DBM<NewsVo> implements NewsDao {public List<NewsVo> findAllByPage(PageVo p) {int recordCount=Integer.parseInt(queryScalar("select count(*) from News").toString());p.setRecordCount(recordCount);int pageSize=p.getPageSize();int pageCount=recordCount/pageSize;if(recordCount%pageSize>0) pageCount++;p.setPageCount(pageCount);int pageIndex=p.getPageIndex();if(pageIndex<0) pageIndex=0;if(pageIndex>pageCount-1) pageIndex=pageCount-1;p.setPageIndex(pageIndex);return query("select top "+pageSize+" * from news where nid not in (select top "+pageIndex*pageSize+" nid from news order by nid) order by nid");}}


 使用前面写的dbuitls+反射!

JSP页面使用:

newsList.jsp

 <table border="1">    <tr>    <td>id</td>    <td>title</td>    <td>author</td>    <td>createDate</td>    </tr>    <%    int index=0;    if(request.getParameter("p")!=null){    index=Integer.parseInt(request.getParameter("p"));    }    PageVo p=new PageVo(0,10,0,index);    for(NewsVo n:new NewsBizImpl().findAllByPag(p)){    %>    <tr>    <td><%=n.getNid()%></td>    <td><%=n.getNtitle() %></td>    <td><%=n.getNauthor() %></td>    <td><%=n.getNcreateDate()%></td>    </tr>    <%    }     %>           </table>


这最后少一行导航功能,我们可能需要这样一个导航功能:

下面的导航基本上是一样的,因此我们可以扩充PageVo.java在其中写一个方法生成导航,jsp页面变为:

 <table border="1">    <tr>    <td>id</td>    <td>title</td>    <td>author</td>    <td>createDate</td>    </tr>    <%    int index=0;    if(request.getParameter("p")!=null){    index=Integer.parseInt(request.getParameter("p"));    }    PageVo p=new PageVo(0,10,0,index);    for(NewsVo n:new NewsBizImpl().findAllByPag(p)){    %>    <tr>    <td><%=n.getNid()%></td>    <td><%=n.getNtitle() %></td>    <td><%=n.getNauthor() %></td>    <td><%=n.getNcreateDate()%></td>    </tr>    <%    }     %>          <tr>           </tr>    </table>


我给PageVo增加了一个toNav的方法,用于生成导航功能:

对于导航我设计了两部分:

左边是一个<span class=info>共42页每页10条 共5页第1页</span> 右边是一个<span class=nav>首页 上一页 下一页 末页</span>

这样方便将来使用样式表进行扩充

最终的PageVo.java代码如下:

public class PageVo {private int recordCount;private int pageSize;private int pageCount;private int pageIndex;public int getRecordCount() {return recordCount;}public void setRecordCount(int recordCount) {this.recordCount = recordCount;}public int getPageSize() {return pageSize;}public void setPageSize(int pageSize) {this.pageSize = pageSize;}public int getPageCount() {return pageCount;}public void setPageCount(int pageCount) {this.pageCount = pageCount;}public int getPageIndex() {return pageIndex;}public void setPageIndex(int pageIndex) {this.pageIndex = pageIndex;}public PageVo(int recordCount, int pageSize, int pageCount, int pageIndex) {super();this.recordCount = recordCount;this.pageSize = pageSize;this.pageCount = pageCount;this.pageIndex = pageIndex;}public String toNav(String jsp){StringBuilder sb=new StringBuilder();sb.append("<span class='info'>共"+recordCount+"页每页"+pageSize+"条 共"+pageCount+"页第"+(pageIndex+1)+"页</span>");sb.append("<span class='nav'>");if(pageIndex==0){sb.append("<span class='a'>首页</span> ");sb.append("<span class='a'>上一页</span> ");}else{sb.append("<a href='"+jsp+"?p=0'>首页</a> ");sb.append("<a href='"+jsp+"?p="+(pageIndex-1)+"'>上一页</a> ");}if(pageIndex>=pageCount-1){sb.append("<span class='a'>下一页</span> ");sb.append("<span class='a'>末页</span>");}else{sb.append("<a href='"+jsp+"?p="+(pageIndex+1)+"'>下一页</a> ");sb.append("<a href='"+jsp+"?p="+(pageCount-1)+"'>末页</a> ");}sb.append("</span>");return sb.toString();}}

这里可以根据需要进行扩充和重载。


 

原创粉丝点击