public class Pagenation {
//第几页
private Integer pageNum;
//
private Integer rowCount;
//数据集合
private List data;
//每页数量
private Integer size;
private Integer pageCount;
private Integer startRow;
private Integer first = 1;
private Integer last;
private Integer previous;
private Integer next;
private Integer startNav;
private Integer endNav;
private Integer navCount = 10;
public Pagenation(Integer pn, Integer rowCount){
//如果页数为空,就设置为1,否则设置为pn
this.pageNum = (pn==null)?1:pn;
//每页最大显示数量
this.rowCount = rowCount;
this.size = 10;
this.pageCount = (int) Math.ceil(this.rowCount/10.0);
this.pageNum = Math.min(this.pageNum , pageCount);
this.pageNum = Math.max(1, this.pageNum);
this.startRow = (this.pageNum-1) * size ;
this.last = this.pageCount;
this.previous = Math.max(1 , this.pageNum-1);
this.next = Math.min( this.pageCount, this.pageNum+1);
this.startNav = (this.pageNum-navCount/2<1)?1:this.pageNum-navCount/2;
this.endNav = this.startNav+this.navCount;
this.endNav = Math.min(this.endNav, this.pageCount);
if(this.endNav-this.startNav < this.navCount){
this.startNav = Math.max(this.endNav-this.navCount, 1);
}
}
public Pagenation(Integer pn, Integer rowCount, Integer size) {
this.pageNum = (pn==null)?1:pn;
this.rowCount = rowCount;
this.size = (size==null)? 10 : size;
this.pageCount = (int) Math.ceil(this.rowCount*1.0/this.size);
this.pageNum = Math.min(this.pageNum , pageCount);
this.pageNum = Math.max(1, this.pageNum);
this.startRow = (this.pageNum-1) * size ;
this.last = this.pageCount;
this.previous = Math.max(1 , this.pageNum-1);
this.next = Math.min( this.pageCount, this.pageNum+1);
this.startNav = (this.pageNum-navCount/2<1)?1:this.pageNum-navCount/2;
this.endNav = this.startNav+this.navCount;
this.endNav = Math.min(this.endNav, this.pageCount);
if(this.endNav-this.startNav < this.navCount){
this.startNav = Math.max(this.endNav-this.navCount, 1);
}
}
public Pagenation() {
}
public Integer getPageNum() {
return pageNum;
}
public void setPageNum(Integer pageNum) {
this.pageNum = pageNum;
}
public Integer getRowCount() {
return rowCount;
}
public void setRowCount(Integer rowCount) {
this.rowCount = rowCount;
}
public List getData() {
return data;
}
public void setData(List data) {
this.data = data;
}
public Integer getSize() {
return size;
}
public void setSize(Integer size) {
this.size = size;
}
public Integer getStartRow() {
return startRow;
}
public void setStartRow(Integer startRow) {
this.startRow = startRow;
}
public Integer getPageCount() {
return pageCount;
}
public void setPageCount(Integer pageCount) {
this.pageCount = pageCount;
}
public Integer getFirst() {
return first;
}
public void setFirst(Integer first) {
this.first = first;
}
public Integer getLast() {
return last;
}
public void setLast(Integer last) {
this.last = last;
}
public Integer getPrevious() {
return previous;
}
public void setPrevious(Integer previous) {
this.previous = previous;
}
public Integer getNext() {
return next;
}
public void setNext(Integer next) {
this.next = next;
}
public Integer getStartNav() {
return startNav;
}
public void setStartNav(Integer startNav) {
this.startNav = startNav;
}
public Integer getEndNav() {
return endNav;
}
public void setEndNav(Integer endNav) {
this.endNav = endNav;
}
public Integer getNavCount() {
return navCount;
}
public void setNavCount(Integer navCount) {
this.navCount = navCount;
}
}
Hibernate后台实现(返回page):
/**
* 记录总数查询
* @return
* @throws Exception
*/
public int findTotal() throws Exception {
List<Number> list=getHibernateTemplate().find(hql);
Number count = list.get(0);
return count.intValue();
}
/**
* 分页查询
*/
@Override
public Pagenation find4Page(Integer pageNum, Integer pageSize) throws Exception {
Pagenation pagenation= new Pagenation(pageNum, findTotal(), pageSize);
DetachedCriteria criteria = DetachedCriteria.forClass(ProdModel.class);
List<ProdModel> userList = getHibernateTemplate()
.findByCriteria(criteria, pagenation.getStartRow(), pageSize);
pagenation.setData(userList);
return pagenation;
}
前台JSP实现:
<!--分页 -->
<div class="page clear xd">
<a class="prev atd" href="prodAction!find4PageByParam?pageNum=${page.previous}&&status=0">上一页<b></b>
</a>
<c:forEach begin="${page.startNav}" end="${page.endNav}" var="nav">
<c:choose>
<c:when test="${page.pageNum==nav}">
<a name="curr" title="${nav }" class="atd"
href="javascript:void(0);">${nav }</a>
</c:when>
<c:otherwise>
<a name="page" title="${nav }" class="atd_curr"
href="prodAction!find4PageByParam?pageNum=${nav}&&status=0">${nav }</a>
</c:otherwise>
</c:choose>
</c:forEach>
<a class="next atd" href="prodAction!find4PageByParam?pageNum=${page.next}&&status=0">下一页<b></b>
</a>
</div>
</div>
缺点:
虽然实现了分页,但是当查询条件发生变更时,分页href需要跟着变更。而我们目前的实现是无法变更的。所以需要对分页进行下一步的封装