페이지 네비게이션(PageHandler) 구현하기

꿈꾸는하늘·2024년 3월 21일

JSP

목록 보기
12/25

게시판 하단부분에 페이지 네비게이션바 구현하기
보통 1~10페이지, 11~20페이지 이런식으로 10페이지를 기준으로
나누기 때문에 naviSize는 10으로 설정하였으나 원하는대로 변경 가능하다.
아래처럼 페이지네비게이션 클래스 생성 후
게시판 목록 Controller에 추가만 해주면 됨!

  • PageHandler class
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 + "]";
	}

	


	
}
  • listController class
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 {
	}

	
}

0개의 댓글