JSP分页导航简单封装

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

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();
	}
}

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


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值