게시판 하단부분에 페이지 네비게이션바 구현하기
보통 1~10페이지, 11~20페이지 이런식으로 10페이지를 기준으로
나누기 때문에 naviSize는 10으로 설정하였으나 원하는대로 변경 가능하다.
아래처럼 페이지네비게이션 클래스 생성 후
게시판 목록 Controller에 추가만 해주면 됨!
package util;
public class PageHandler {
private SearchCondition sc;
private int totalCnt; //총 게시물 수
private int naviSize = 10; //페이지 네비게이션 크기
private int totalPage; //전체 페이지 수
private int beginPage; //시작 페이지
private int endPage; //마지막 페이지
private boolean showPrev; //이전페이지 출력 여부
private boolean showNext; //다음페이지 출력 여부
//현재 페이지, 총 게시물 수
public PageHandler(int totalCnt, int page) {
this(new SearchCondition(page, 10), totalCnt);
}
//총 게시물 수, 현재페이지, 페이지 수
public PageHandler(int totalCnt, int page, int pageSize) {
this(new SearchCondition(page, pageSize), totalCnt);
}
public PageHandler(SearchCondition sc, int totalCnt) {
this.sc = sc;
this.totalCnt = totalCnt;
doPaging(totalCnt, sc);
}
public PageHandler() {
}
private void doPaging(int totalCnt, SearchCondition sc) {
totalPage = (int)Math.ceil(totalCnt/(double)sc.getPageSize());
beginPage = (sc.getPage()-1)/naviSize*naviSize+1;
endPage = Math.min(beginPage+naviSize-1, totalPage);
showPrev = beginPage!=1;
showNext = endPage!=totalPage;
}
public SearchCondition getSc() {
return sc;
}
public void setSc(SearchCondition sc) {
this.sc = sc;
}
public int getTotalCnt() {
return totalCnt;
}
public void setTotalCnt(int totalCnt) {
this.totalCnt = totalCnt;
}
public int getNaviSize() {
return naviSize;
}
public void setNaviSize(int naviSize) {
this.naviSize = naviSize;
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public int getBeginPage() {
return beginPage;
}
public void setBeginPage(int beginPage) {
this.beginPage = beginPage;
}
public int getEndPage() {
return endPage;
}
public void setEndPage(int endPage) {
this.endPage = endPage;
}
public boolean isShowPrev() {
return showPrev;
}
public void setShowPrev(boolean showPrev) {
this.showPrev = showPrev;
}
public boolean isShowNext() {
return showNext;
}
public void setShowNext(boolean showNext) {
this.showNext = showNext;
}
@Override
public String toString() {
return "PageHandler [sc=" + sc + ", totalCnt=" + totalCnt + ", naviSize=" + naviSize
+ ", totalPage=" + totalPage + ", beginPage=" + beginPage + ", endPage=" + endPage
+ ", showPrev=" + showPrev + ", showNext=" + showNext + "]";
}
}
package controller;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
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 dao.BoardDao;
import dto.BoardDto;
import util.JSFunction;
import util.PageHandler;
import util.SearchCondition;
@WebServlet ("/list")
public class listController extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
if(req.getSession().getAttribute("id")==null) {
String url = req.getRequestURI();
JSFunction.alertLocation("로그인 후 이용해주세요.", "login?url="+url, resp);
return;
}
BoardDao dao = new BoardDao(req.getServletContext());
Map<String, String> map = new HashMap<String, String>();
SearchCondition sc = null;
PageHandler ph = null;
//쿼리스트링 통해서 전달 받을 값
String searchField = req.getParameter("searchField");
String searchWord = req.getParameter("searchWord");
int pageSize = 10;
int pageNum = 1;
String pageTmp = req.getParameter("pageNum");
if(pageTmp != null && !"".equals(pageTmp)&&!"null".equals(pageTmp)) {
pageNum = Integer.parseInt(pageTmp);
}
//검색어가 있다면
if(searchWord!=null&&!"".equals(searchWord)) {
map.put("searchField", searchField);
map.put("searchWord", searchWord);
sc = new SearchCondition(searchField, searchWord, pageNum, pageSize);
} else {
sc = new SearchCondition(pageNum, pageSize);
}
//총 게시물 수 확인
int totalCnt = dao.selectCount(map);
ph = new PageHandler(sc, totalCnt);
map.put("offset", sc.getOffset(pageNum)+"");
map.put("pageSize", pageSize+"");
//게시물 조회
List<BoardDto> blist = dao.selectList(map);
req.setAttribute("blist", blist);
req.setAttribute("ph", ph);
req.setAttribute("pageNum", pageNum);
//날짜 비교
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String now = sdf.format(date);
req.setAttribute("now", now);
dao.close();
req.getRequestDispatcher("List.jsp").forward(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
}