Paging Implementation for the Current Board
To implement the required functionality for the current board, a total of 3 variables were identified as necessary. Using these 3 variables, various data points were calculated. The implementation was done through a dedicated paging class as outlined below:Essential Variables for Paging
Current Page Number (
pageNumber
)
The page number currently being viewed.Number of Items per Page (
pageSize
)
The number of data items to display on a single page.Total Number of Items (
totalCount
)
The total count of data items available.
Derived Data Points
Using the three essential variables, the following data points were calculated:
Total Number of Pages (
totalPage
)- The total number of pages required to display all items.
- Formula:
totalPage = ceil(totalCount / pageSize)
Start Page Number (
minPageNumber
)- The first page number to display in the current pagination block.
End Page Number (
maxPageNumber
)- The last page number to display in the current pagination block.
Previous Page Number (
prevPageNumber
)- The page number immediately preceding the current page, if available.
Next Page Number (
nextPageNumber
)- The page number immediately following the current page, if available.
First Page Number (
firstPageNumber
)- The very first page in the pagination (always 1).
Last Page Number (
lastPageNumber
)- The very last page in the pagination, equal to
totalPage
.
- The very last page in the pagination, equal to
Java class
class Paging { int pageNumber; // Current page number int pageSize; // Items per page int totalCount; // Total items count int totalPage; // Total number of pages int minPageNumber; // Start page in the current pagination int maxPageNumber; // End page in the current pagination int prevPageNumber; // Previous page number int nextPageNumber; // Next page number int firstPageNumber; // Always 1 int lastPageNumber; // Last page number public Paging(int pageNumber, int pageSize, int totalCount) { this.pageNumber = pageNumber; this.pageSize = pageSize; this.totalCount = totalCount; this.totalPage = (int) Math.ceil((double) totalCount / pageSize); this.firstPageNumber = 1; this.lastPageNumber = totalPage; this.minPageNumber = Math.max(1, pageNumber - 2); // Example logic this.maxPageNumber = Math.min(totalPage, pageNumber + 2); // Example logic this.prevPageNumber = pageNumber > 1 ? pageNumber - 1 : -1; this.nextPageNumber = pageNumber < totalPage ? pageNumber + 1 : -1; } }
Class Usage
Paging paging = new Paging(currentPageNumber, pageSize, totalRows);
Freemarker Template Example
<div class="pagination pagination-centered"> <ul> <#if paging.minPageNumber != 0 && paging.maxPageNumber != 0> <#if paging.prevPageNumber != 0> <li><a href="?pageno=${paging.prevPageNumber}">Prev</a></li> </#if> <#list paging.minPageNumber..paging.maxPageNumber as i> <#if i = paging.pageNumber> <li class="active"><#else> <li></#if><a href="?pageno=${i}">${i}</a></li> </#list> <#if paging.nextPageNumber != 0> <li><a href="?pageno=${paging.nextPageNumber}">Next</a></li> </#if> </#if> </ul> </div>