Skip to content

Instantly share code, notes, and snippets.

@stuwilli
Last active August 29, 2015 13:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save stuwilli/9584770 to your computer and use it in GitHub Desktop.
Save stuwilli/9584770 to your computer and use it in GitHub Desktop.
Spring Data Pagination Taglib
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ attribute name="pg" type="org.springframework.data.domain.Page" required="true" rtexprvalue="true" description="The current Page" %>
<c:set var="showPages" value="10" />
<%-- No User Settings Below Here --%>
<c:set var="pageRange" value="${showPages -1}" />
<c:set var="pageCount" value="${pg.getTotalPages() -1}" />
<c:set var="pageNumber" value="${pg.getNumber() + 1}" />
<c:set var="delta" value="${(pageRange /2)+(1-((pageRange /2)%1))%1}" />
<c:set var="query" value="?" />
<c:forTokens var="q" items="${pageContext.request.queryString}" delims="&">
<c:if test="${fn:startsWith(q, 'p=') == false}">
<c:set var="query" value="${query}${q}&" />
</c:if>
</c:forTokens>
<c:choose>
<c:when test="${pageRange gt pageCount}">
<c:set var="begin" value="0" />
<c:set var="end" value="${pageCount}" />
</c:when>
<c:otherwise>
<c:choose>
<c:when test="${pageNumber - delta gt pageCount - pageRange}">
<c:set var="begin" value="${pageCount - pageRange}" />
<c:set var="end" value="${pageCount}" />
</c:when>
<c:otherwise>
<c:choose>
<c:when test="${pageNumber - delta < 0}">
<c:set var="offsetDelta" value="${pageNumber}" />
</c:when>
<c:otherwise>
<c:set var="offsetDelta" value="${delta}" />
</c:otherwise>
</c:choose>
<c:set var="offset" value="${pageNumber - offsetDelta}" />
<c:set var="begin" value="${offset}" />
<c:set var="end" value="${offset + pageRange}" />
</c:otherwise>
</c:choose>
</c:otherwise>
</c:choose>
<c:if test="${pg.totalPages >= 2 }">
<!-- pagination -->
<div class="pagination">
<ul>
<c:choose>
<c:when test="${pg.isFirstPage()}">
<li class="disabled"><a href="#">First</a></li>
<li class="disabled"><a href="#">&laquo;</a></li>
</c:when>
<c:otherwise>
<li><a href="<c:out value="${query}" />">First</a></li>
<li><a href="<c:out value="${query}p=${pg.getNumber() -1}" />">&laquo;</a></li>
</c:otherwise>
</c:choose>
<c:forEach var="i" begin="${begin}" end="${end}">
<c:choose>
<c:when test="${i == pg.getNumber()}">
<li class="active"><a href="<c:out value="${query}p=${i}" />"><c:out value="${i+1}" /></a></li>
</c:when>
<c:otherwise>
<li><a href="<c:out value="${query}p=${i}" />"><c:out value="${i+1}" /></a></li>
</c:otherwise>
</c:choose>
</c:forEach>
<c:choose>
<c:when test="${pg.isLastPage()}">
<li class="disabled"><a href="#">&raquo;</a></li>
<li class="disabled"><a href="#">Last</a></li>
</c:when>
<c:otherwise>
<li><a href="<c:out value="${query}p=${pg.getNumber() +1}" />">&raquo;</a></li>
<li><a href="<c:out value="${query}p=${pg.getTotalPages() -1}" />">Last</a></li>
</c:otherwise>
</c:choose>
</ul>
</div>
<!-- end pagination -->
</c:if>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment