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