自己优化的struts分页
前几天突然想到优化一个分页,结果做了大半天,觉得还不错,分享一下。
这是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;
- }
- }
有些方法可能没用到。所以我注释掉了。
这个优化完应该算是一个功能比较全的分页了。。

浙公网安备 33010602011771号