前几天突然想到优化一个分页,结果做了大半天,觉得还不错,分享一下。
这是PageBean
再下来是主要的算法
pageSession
有些方法可能没用到。所以我注释掉了。
这个优化完应该算是一个功能比较全的分页了。。
这是PageBean
import java.util.ArrayList;
import java.util.List;
public class PageBean extends BaseBean{
/**
*
*/
private static final long serialVersionUID = 1L;
private int currentPage=1;//当前页
private int totalPages=0;//总页数
private int pageSize=11;//每页显示条数
private int totalRows=0;//总条数
private int pageStartRow=0;//开始条数
private int pageEndRow=0;//结束条数
private boolean hasNextPage=false;//是否存在下一页
private boolean hasPreviousPage=false;//是否存在上一页
private boolean hasNextNextPage=false;//是否存在上上一页(一次跳转10页)
private boolean hasPreviousPreviousPage=false;//是否存在下下一页(一次跳转10页)
private int nextPage=0;//下一页的页号
private int perviousPage=0;//上一页的页号
private int nextNextPage=0;
private int perviousPerviousPage=0;
private List pages;
public PageBean(){
pages=new ArrayList();
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public void setTotalPages(int totalPages) {
this.totalPages = totalPages;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public void setTotalRows(int totalRows) {
this.totalRows = totalRows;
}
public void setPageStartRow(int pageStartRow) {
this.pageStartRow = pageStartRow;
}
public void setPageEndRow(int pageEndRow) {
this.pageEndRow = pageEndRow;
}
public void setHasNextPage(boolean hasNextPage) {
this.hasNextPage = hasNextPage;
}
public void setHasPreviousPage(boolean hasPreviousPage) {
this.hasPreviousPage = hasPreviousPage;
}
public void setNextPage(int nextPage) {
this.nextPage = nextPage;
}
public void setPerviousPage(int perviousPage) {
this.perviousPage = perviousPage;
}
public int getCurrentPage() {
return currentPage;
}
public int getTotalPages() {
return totalPages;
}
public int getPageSize() {
return pageSize;
}
public int getTotalRows() {
return totalRows;
}
public int getPageStartRow() {
return pageStartRow;
}
public int getPageEndRow() {
return pageEndRow;
}
public boolean isHasNextPage() {
return hasNextPage;
}
public boolean isHasPreviousPage() {
return hasPreviousPage;
}
public int getNextPage() {
return nextPage;
}
public int getPerviousPage() {
return perviousPage;
}
public boolean isHasNextNextPage() {
return hasNextNextPage;
}
public void setHasNextNextPage(boolean hasNextNextPage) {
this.hasNextNextPage = hasNextNextPage;
}
public boolean isHasPreviousPreviousPage() {
return hasPreviousPreviousPage;
}
public void setHasPreviousPreviousPage(boolean hasPreviousPreviousPage) {
this.hasPreviousPreviousPage = hasPreviousPreviousPage;
}
public int getNextNextPage() {
return nextNextPage;
}
public void setNextNextPage(int nextNextPage) {
this.nextNextPage = nextNextPage;
}
public int getPerviousPerviousPage() {
return perviousPerviousPage;
}
public void setPerviousPerviousPage(int perviousPerviousPage) {
this.perviousPerviousPage = perviousPerviousPage;
}
public List getPages() {
return pages;
}
public void setPages(List pages) {
this.pages = pages;
}
}
再下来是主要的算法
pageSession
public class PageSessionBean {
PageBean pvb = new PageBean();
public PageBean pagebean(int total, int pagesize) {
//
pvb.setPageSize(pagesize);
pvb.setTotalRows(total);
pvb.setCurrentPage(1);
pvb.setHasPreviousPage(false);
pvb.setHasPreviousPreviousPage(false);
pvb.setPageStartRow(0);
if (total % pagesize == 0) {
pvb.setTotalPages(total / pagesize);
} else {
pvb.setTotalPages((total / pagesize) + 1);
}
if (pvb.getTotalPages() > 1) {
pvb.setNextPage(2);
pvb.setHasNextPage(true);
} else {
pvb.setHasNextPage(false);
}
if (pvb.getTotalPages() > 10) {
pvb.setHasNextNextPage(true);
pvb.setNextNextPage(11);
} else {
pvb.setHasNextNextPage(false);
}
pvb.getPages().removeAll(pvb.getPages());
// 移除列表里面的所有对象
for (int i = 1; i <= pvb.getTotalPages() && i <= 10; i++) {
Integer temp = new Integer(i);
pvb.getPages().add(temp);
}
return pvb;
}
public PageBean gotoPage(int pagesize, int pageNo) {
pvb.setPageSize(pagesize);
pvb.setCurrentPage(pageNo);
if (pageNo <= 6) { // 当从用户输入框里面输入的数字小于6的时候
pvb = pagebean(pvb.getTotalRows(), pvb.getPageSize());
pvb.setCurrentPage(pageNo);
} else if (pageNo > 6 && pageNo <= pvb.getTotalPages()) {//当输入大于6且小于总页数的时候
int tr=pageNo;
pvb.getPages().removeAll(pvb.getPages());
if(pvb.getTotalPages()>6&&pvb.getTotalPages()<=10){
for(int i=1;i<=pvb.getTotalPages();i++){
Integer t=new Integer(i);
pvb.getPages().add(t);
}}
else{
for(int i=tr-5;i<=tr+4&&i<=pvb.getTotalPages();i++){
Integer t=new Integer(i);
pvb.getPages().add(t);
}
}
// //int num = 0; // pageNo十位上的数字
// // num = pageNo / 10;
// //if (pvb.getTotalPages() > (num + 1) * 10) {
// // 当页的总数大于这个区间的数字时
// Integer tr = new Integer(num * 10+1);
// pvb.getPages().removeAll(pvb.getPages());
// pvb.getPages().add(tr);
// for (int i = 2; i <=10; i++) {
// Integer t = new Integer(num * 10 + i);
// pvb.getPages().add(t);
// }
// } else {
// Integer tr = new Integer(num * 10+1);
// pvb.getPages().removeAll(pvb.getPages());
// pvb.getPages().add(tr);
// for (int i = 2; i < pvb.getTotalPages() - (num * 10) + 1; i++) {
// Integer t = new Integer(num * 10 + i);
// pvb.getPages().add(t);
// }
// }
pvb.setCurrentPage(pageNo);
} else {
//当输入的页数大于总页数的时候
int num=0; //得到总页数的十位数字
num=pvb.getTotalPages()/10;
pvb.getPages().removeAll(pvb.getPages());
for(int i=num*10+1;i<pvb.getTotalPages()+1;i++){
Integer t = new Integer(i);
pvb.getPages().add(t);
}
pvb.setCurrentPage(pvb.getTotalPages());
}
if(pageNo+1<=pvb.getTotalPages()){
pvb.setNextPage(pageNo+1);
pvb.setHasNextPage(true);
}else{
pvb.setHasNextNextPage(false);
pvb.setNextPage(0);
}
if(pageNo+10<=pvb.getTotalPages()){
pvb.setNextNextPage(pageNo+10);
pvb.setHasNextNextPage(true);
}else{
pvb.setHasNextNextPage(false);
pvb.setNextNextPage(0);
}
if(pageNo-10>=1){
pvb.setPerviousPerviousPage(pageNo-10);
pvb.setHasPreviousPreviousPage(true);
}else{
pvb.setHasPreviousPreviousPage(false);
pvb.setPerviousPerviousPage(0);
}
if(pageNo-1>=1){
pvb.setPerviousPage(pageNo-1);
pvb.setHasPreviousPage(true);
}else{
pvb.setHasPreviousPage(false);
pvb.setPerviousPerviousPage(0);
}
pvb.setPageStartRow((pvb.getCurrentPage() - 1) * pvb.getPageSize());
return pvb;
}
}
有些方法可能没用到。所以我注释掉了。
这个优化完应该算是一个功能比较全的分页了。。
本文介绍了一种优化后的分页算法实现方案,通过自定义PageBean类来管理分页参数,包括当前页、总页数等,并提供gotoPage方法支持用户跳转至指定页。该算法还支持快速跳转至前后10页的功能。
916

被折叠的 条评论
为什么被折叠?



