Spring Boot で Pager Helper 作った
View の Pagination の表示ロジック系が色々めんどくさかったので作った。
参考にたやつはこちら
public class Pager<T> { private static final int DISPLAY_PAGE_NUM = 5; private static final int DEFAULT_PAGE_POSITION = 3; private String url; private String queryString; private Page<T> page; private List<PageItem> items; public Pager(ServletWebRequest request, Page<T> page) { this(request, page, DEFAULT_DISPLAY_NUM, DEFAULT_PAGE_POSITION); } public Pager(ServletWebRequest request, Page<T> page, int displayPageNum, int pagePosition) { url = request.getRequest.getRequestURI(); this.page = page; queryString = request.getParameterMap().entrySet().stream().filter(e -> !e.getKey().equals("page")).map(e -> e.getKey() + "=" + e.getValue()[0]).collect(Collectors.joining("&")); int currentPage = page.getNumber() + 1; int totalPageNum = page.getTotalPages(); int start = 0; int end = totalPageNum; if (page.getTotalPages() <= displayPageNum) { start = 1; } else { start = (currentPage - pagePosition > 1) ? currentPage - pagePosition : 1; if (start + (displayPageNum - 1) > totalPageNum) { start = totalPageNum - (displayPageNum - 1); } } if (end > displayPageNum) { end = start + (displayPageNum - 1); } items = IntStream.rangeClosed(start, end) .mapToObj(i -> new PageItem(url, i - 1, (i - 1) == page.getNumber())) .collect(Collectors.toList()); } public boolean isFirst() { return page.isFirst(); } public boolean isLast() { return page.isLast(); } public List<T> getContent() { return page.getContent(); } public List<PageItem> getItems() { return items; } public int getPrevPageNumber() { return page.previousPageable().getNumber(); } public int getNextPageNumber() { return page.nextPageable().getNumber(); } public String getPrevUrl() { return getUrl(getPrevPageNumber()); } public String getNextUrl() { return getUrl(getNextPageNumber()); } private String getUrl(int number) { String s = url + "?page=" + number; if (!Strings.isNullOrEmpty(queryString)) { s += "&" + queryString; } return s; } public class PageItem { private String url; private int number; private boolean current; public PageItem(String url, int number, boolean current) { this.url = url; this.number = number; this.current = current; } public int getNumber() { return number + 1; } public String getUrl() { return url; } public boolean isCurrent() { return current; } } }