diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/page/NavigatePageInfo.java b/hutool-core/src/main/java/cn/hutool/core/lang/page/NavigatePageInfo.java index d605be398..6edbd22a1 100644 --- a/hutool-core/src/main/java/cn/hutool/core/lang/page/NavigatePageInfo.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/page/NavigatePageInfo.java @@ -1,13 +1,31 @@ package cn.hutool.core.lang.page; +/** + * 导航分页信息类
+ * 根据提供的总页数、每页记录数、导航页码数等信息,生成导航数组。 + *
+ *     [1] 2 3 4 5 >>
+ *     << 1 [2] 3 4 5 >>
+ *     << 1 2 3 4 [5]
+ * 
+ * + * @author 莫取网名 + */ public class NavigatePageInfo extends PageInfo { - private final int navigatePages; //导航页码数 + private final int navigatePageCount; //导航页码数 private int[] navigatePageNumbers; //所有导航页号 - public NavigatePageInfo(final int total, final int pageSize, int navigatePages) { + /** + * 构造 + * + * @param total 总记录数 + * @param pageSize 每页显示记录数 + * @param navigatePageCount 导航页码数 + */ + public NavigatePageInfo(final int total, final int pageSize, final int navigatePageCount) { super(total, pageSize); - this.navigatePages = navigatePages; + this.navigatePageCount = navigatePageCount; //基本参数设定之后进行导航页面的计算 calcNavigatePageNumbers(); @@ -22,26 +40,50 @@ public class NavigatePageInfo extends PageInfo { return navigatePageNumbers; } + @Override + public NavigatePageInfo setFirstPageNo(final int firstPageNo) { + super.setFirstPageNo(firstPageNo); + return this; + } + + @Override + public NavigatePageInfo setPageNo(final int pageNo) { + super.setPageNo(pageNo); + // 重新计算导航 + calcNavigatePageNumbers(); + return this; + } + + @Override public String toString() { final StringBuilder str = new StringBuilder(); - if(false == isFirstPage()){ + if (false == isFirstPage()) { str.append("<< "); } if (navigatePageNumbers.length > 0) { - str.append(wrap(navigatePageNumbers[0])); + str.append(wrapForDisplay(navigatePageNumbers[0])); } for (int i = 1; i < navigatePageNumbers.length; i++) { - str.append(" ").append(wrap(navigatePageNumbers[i])); + str.append(" ").append(wrapForDisplay(navigatePageNumbers[i])); } - if(false == isLastPage()){ + if (false == isLastPage()) { str.append(" >>"); } return str.toString(); } - private String wrap(final int pageNumber){ - if(this.pageNo == pageNumber){ + // region ----- private methods + + /** + * 用于显示的包装
+ * 当前页显示'[pageNumber]',否则直接显示 + * + * @param pageNumber 页码 + * @return 包装的页码 + */ + private String wrapForDisplay(final int pageNumber) { + if (this.pageNo == pageNumber) { return "[" + pageNumber + "]"; } return String.valueOf(pageNumber); @@ -51,35 +93,36 @@ public class NavigatePageInfo extends PageInfo { * 计算导航页 */ private void calcNavigatePageNumbers() { - //当总页数小于或等于导航页码数时 - if (pages <= navigatePages) { - navigatePageNumbers = new int[pages]; - for (int i = 0; i < pages; i++) { + //当总页数小于或等于导航页码数时,全部显示 + if (pageCount <= navigatePageCount) { + navigatePageNumbers = new int[pageCount]; + for (int i = 0; i < pageCount; i++) { navigatePageNumbers[i] = i + 1; } - } else { //当总页数大于导航页码数时 - navigatePageNumbers = new int[navigatePages]; - int startNum = pageNo - navigatePages / 2; - int endNum = pageNo + navigatePages / 2; + } else { //当总页数大于导航页码数时,部分显示 + navigatePageNumbers = new int[navigatePageCount]; + int startNum = pageNo - navigatePageCount / 2; + int endNum = pageNo + navigatePageCount / 2; if (startNum < 1) { startNum = 1; //(最前navPageCount页 - for (int i = 0; i < navigatePages; i++) { + for (int i = 0; i < navigatePageCount; i++) { navigatePageNumbers[i] = startNum++; } - } else if (endNum > pages) { - endNum = pages; + } else if (endNum > pageCount) { + endNum = pageCount; //最后navPageCount页 - for (int i = navigatePages - 1; i >= 0; i--) { + for (int i = navigatePageCount - 1; i >= 0; i--) { navigatePageNumbers[i] = endNum--; } } else { //所有中间页 - for (int i = 0; i < navigatePages; i++) { + for (int i = 0; i < navigatePageCount; i++) { navigatePageNumbers[i] = startNum++; } } } } + // endregion } diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/page/PageInfo.java b/hutool-core/src/main/java/cn/hutool/core/lang/page/PageInfo.java index 461d1f87e..86c06bd17 100644 --- a/hutool-core/src/main/java/cn/hutool/core/lang/page/PageInfo.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/page/PageInfo.java @@ -36,7 +36,7 @@ public class PageInfo { /** * 总页数 */ - int pages; + int pageCount; /** * 首页标识 */ @@ -74,7 +74,7 @@ public class PageInfo { this.pageSize = pageSize; // 因为总条数除以页大小的最大余数是页大小数-1, // 因此加一个最大余数,保证舍弃的余数与最大余数凑1.x,就是一旦有余数则+1页 - this.pages = (total + pageSize - 1) / pageSize; + this.pageCount = (total + pageSize - 1) / pageSize; } /** @@ -100,8 +100,8 @@ public class PageInfo { * * @return {int} */ - public int getPages() { - return pages; + public int getPageCount() { + return pageCount; } /** @@ -129,7 +129,7 @@ public class PageInfo { * @return 是否尾页 */ public boolean isLastPage() { - return getPageIndexBase1() == this.pages; + return getPageIndexBase1() == this.pageCount; } /** @@ -147,7 +147,7 @@ public class PageInfo { * @return 是否有下一页 */ public boolean hasNextPage() { - return getBeginIndex() < this.pages; + return getBeginIndex() < this.pageCount; } /** @@ -155,7 +155,7 @@ public class PageInfo { * @return 是否可用 */ public boolean isValidPage(){ - return this.getPageIndexBase1() <= this.pages; + return this.getPageIndexBase1() <= this.pageCount; } /** @@ -255,7 +255,7 @@ public class PageInfo { /** * 下一页,即当前页码+1
- * 当超过末页时,此方法指向的页码值始终为{@link #getPages()} + 1,即最后一页后的空白页。 + * 当超过末页时,此方法指向的页码值始终为{@link #getPageCount()} + 1,即最后一页后的空白页。 * * @return this */ @@ -275,7 +275,7 @@ public class PageInfo { public String toString() { return "{" + "total=" + total + - ",pages=" + pages + + ",pages=" + pageCount + ",pageNumber=" + pageNo + ",limit=" + pageSize + ",isFirstPage=" + isFirstPage() + diff --git a/hutool-core/src/test/java/cn/hutool/core/lang/page/PageInfoTest.java b/hutool-core/src/test/java/cn/hutool/core/lang/page/PageInfoTest.java index eca662cca..de4002884 100644 --- a/hutool-core/src/test/java/cn/hutool/core/lang/page/PageInfoTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/lang/page/PageInfoTest.java @@ -7,10 +7,10 @@ public class PageInfoTest { @Test public void pagesTest() { PageInfo pageInfo = new PageInfo(20, 3); - Assert.assertEquals(7, pageInfo.getPages()); + Assert.assertEquals(7, pageInfo.getPageCount()); pageInfo = new PageInfo(20, 4); - Assert.assertEquals(5, pageInfo.getPages()); + Assert.assertEquals(5, pageInfo.getPageCount()); } @Test diff --git a/hutool-db/src/main/java/cn/hutool/db/PageResult.java b/hutool-db/src/main/java/cn/hutool/db/PageResult.java index c495f650e..e47cc7a92 100644 --- a/hutool-db/src/main/java/cn/hutool/db/PageResult.java +++ b/hutool-db/src/main/java/cn/hutool/db/PageResult.java @@ -65,7 +65,7 @@ public class PageResult extends ArrayList { this(page, pageSize); this.total = total; - this.totalPage = PageInfo.of(total, pageSize).getPages(); + this.totalPage = PageInfo.of(total, pageSize).getPageCount(); } //---------------------------------------------------------- Constructor end