화면에서 Pagination예제를 나타낼 링크를 생성한다.
index.jsp
<a href="Test11Sevlet">JSTL loop forEach begin end (이후 페이징 처리)</a><br><br>
Pagination.java
package org.kosta.webstudy16.model;
//paging bean
public class Pagination {
private int startPage;
private int endPage;
private boolean previousPageGroup;
private boolean nextPageGroup;
public int getStartPage() {
return startPage;
}
public void setStartPage(int startPage) {
this.startPage = startPage;
}
public int getEndPage() {
return endPage;
}
public void setEndPage(int endPage) {
this.endPage = endPage;
}
public boolean isPreviousPageGroup() {
return previousPageGroup;
}
public void setPreviousPageGroup(boolean previousPageGroup) {
this.previousPageGroup = previousPageGroup;
}
public boolean isNextPageGroup() {
return nextPageGroup;
}
public void setNextPageGroup(boolean nextPageGroup) {
this.nextPageGroup = nextPageGroup;
}
@Override
public String toString() {
return "Pagination [startPage=" + startPage + ", endPage=" + endPage + ", previousPageGroup="
+ previousPageGroup + ", nextPageGroup=" + nextPageGroup + "]";
}
}
시작페이지 startPage, 끝페이지 endPage 이전페이지 그룹으로 돌아갈 수 있는 previousPageGroup, 다음 페이지 그룹으로 갈 수 있는 nextPageGroup 변수를 만들고 getter, setter를 생성했다.
Test11Servlet
package org.kosta.webstudy16.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.kosta.webstudy16.model.Pagination;
/**
* Servlet implementation class Test11Sevlet
*/
@WebServlet("/Test11Sevlet")
public class Test11Sevlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Pagination pagination = new Pagination();
pagination.setStartPage(1);
pagination.setEndPage(4);
pagination.setNextPageGroup(true);
pagination.setPreviousPageGroup(false);
request.setAttribute("pagination", pagination);
request.getRequestDispatcher("step11-jstl-forEach-begin-end.jsp").forward(request, response);
}
}
Pagination pagination = new Pagination();
pagination.setStartPage(1);
pagination.setEndPage(4);
Pagination 객체를 생성하고 setter를 이용해 시작페이지, 끝페이지를 설정했다.
pagination.setNextPageGroup(true);
pagination.setPreviousPageGroup(false);
boolean 데이터 타입으로 선언한 nextPageGroup, previousPageGroup에 각 각 true, false를 넣어주었다.
request.setAttribute("pagination", pagination);
request.getRequestDispatcher("step11-jstl-forEach-begin-end.jsp").forward(request, response);
"pagination"이라는 name으로 pagination 객체를 set하고 jsp로 넘어갈 수 있도록 했다.
step11-jstl-forEach-begin-end.jsp
<c:forEach begin="1" end="5" var="page">${page}</c:forEach>
jsp에서 forEach 구문으로 begin, end옵션으로 숫자를 넘겨 화면에 출력할 수 있다.
이 예제를 활용해 pagination 객체를 받아 처리해볼수 있도록 한다.
<ul class="pagination">
<li class="page-item"><a class="page-link" href="#">Previous</a></li>
<c:forEach begin="1" end="5" var="page">
<li class="page-item"><a class="page-link" href="#">${page}</a></li>
</c:forEach>
<li class="page-item"><a class="page-link" href="#">Next</a></li>
<ul class="pagination">
bootstrap의 pagination 소스를 활용하고, servlet에서 시작하고자하는 숫자와 끝내고싶은 숫자, 그리고 이전버튼과 다음버튼을 나타나는것의 유무를 조건문으로 처리해 나타낸다.
<ul class="pagination">
<c:if test="${pagination.previousPageGroup}">
<li class="page-item"><a class="page-link" href="#">Previous</a></li>
</c:if>
<c:forEach begin="${pagination.startPage}" end="${pagination.endPage}" var="page">
<li class="page-item"><a class="page-link" href="#">${page}</a></li>
</c:forEach>
<c:if test="${pagination.nextPageGroup}">
<li class="page-item"><a class="page-link" href="#">Next</a></li>
</c:if>
<ul class="pagination">
servlet에서 previousPageGroup를 false를, nextPageGroup를 true로 주었고 이를 조건문으로 처리해 화면에 나타낼 수 있다.
이 코드를 jstl의 set을 이용해서 코드를 간결하게 만들어본다.
<c:set var="p" value="${requestScope.pagination}" />
<ul class="pagination">
<c:if test="${p.previousPageGroup}">
<li class="page-item"><a class="page-link" href="#">Previous</a></li>
</c:if>
<c:forEach begin="${p.startPage}" end="${p.endPage}" var="page">
<li class="page-item"><a class="page-link" href="#">${page}</a></li>
</c:forEach>
<c:if test="${p.nextPageGroup}">
<li class="page-item"><a class="page-link" href="#">Next</a></li>
</c:if>
<ul class="pagination">