본문 바로가기

programming/Gukbi

국비 교육 67일차 - 페이지 블록 나누기

728x90
반응형

프로젝트와 같이 하면서 블로깅이 밀리고 있다. 일단 프로젝트에 실제로 적용해야 할 부분을 정리하면서 동시에 기능을 만들어 나가려고 한다. 

 

내가 맡은 부분은 여행사진 공유 게시판이기 때문에, 업로드된 여행사진을 한눈에 볼 수 있는 페이지와 상세보기 페이지를 따로 만들어야 한다. 

 

특히 한눈에 볼 수 있는 페이지에서는 페이지 블록을 나눠줘야 많은 데이터를 한번에 출력하는게 아닌, 페이지를 나누어 출력할 수 있다. 

 

 이전 다음 이 부분이 페이지 블록을 나눠주는 부분이다. 

 

우선 총페이지를 구해주고, 페이지 블록을 얼만큼 설정해줄 것인지 정해야 한다. 

int totalpage=(int)(Math.ceil(count/12.0));
		
		
		final int BLOCK=10;
		int startPage=((curpage-1)/BLOCK*BLOCK)+1;
		// 1~10 => 9/10 => 0.9 int는 소수점 인식하지 않기 때문에 0
		// 11~20 => start가 11
		int endPage=((curpage-1)/BLOCK*BLOCK)+BLOCK;
		
		if(endPage>totalpage)
			endPage=totalpage;

 수업 예제에서는 블록을 10으로 설정했다. 

startPage는 현재페이지 (?page=n 으로 받아온 값) 빼기 1을 해주고, 그걸 블록 수만큼 나눠준다

 

1~10페이지면 0/10 => 0, 1/10 => 0.1 ... 0.9까지이지만 int는 소수점을 인식하지 않기 때문에 0이 된다. 

11~20페이지면 10/10 =>1, 11/10 => 1.1 ... 1.9 도 역시 전부 1로 인식을 한다. 

 

여기에 다시 블록만큼 곱해주고 +1을 해준다

1페이지면 0*10+1=1

2페이지면 1*10+1=11

 

endPage는 마지막에 BLOCK만큼 (10)만큼 더해주면 값이 나온다. 

혹은 startPage에 BLOCK-1을 그냥 더해줘도 될것같다. 

 

그리고 endPage가 totalPage보다 크면 그냥 endPage에 totalPage값을 넣어준다. 

22까지 밖에 없는데 굳이 23,24를 출력해줄 필요가 없기 때문이다. 

 

내가 프로젝트에 쓴 코드

@RequestMapping("board/board_main.do")
	public String board_main (HttpServletRequest request, HttpServletResponse response)
	{
		// dao연결, 리스트에 담아두기, request에 담아서 보내기 
		BoardDAO dao=BoardDAO.newInstance();
		String page=request.getParameter("page");
		if(page==null)
			page="1";
		int curpage=Integer.parseInt(page);
		List<BoardVO> mList=dao.boardMainData(curpage);
		
		
		// 총페이지 
		int totalPage=dao.boardToatalPage();
		
		// 페이지 나누기 
		final int BLOCK=5;
		int startPage=((curpage-1)/BLOCK*BLOCK)+1;
		int endPage=startPage + (BLOCK-1);
		if(endPage>totalPage)
			endPage=totalPage;
		
		request.setAttribute("BLOCK", BLOCK);
		request.setAttribute("curpage", curpage);
		request.setAttribute("startPage", startPage);
		request.setAttribute("endPage", endPage);
		request.setAttribute("totalPage", totalPage);
		request.setAttribute("mList", mList);
		request.setAttribute("main_jsp", "../board/board_main.jsp");
		return "../main/main.jsp";
	}

이렇게 모델에서 처리를 해주고 request로 값을 보내준다.

 

 

****curpage-1 꼭 해줘야 한다. 안그러면 다음으로 넘어가기전 마지막 페이지에서 오류난다. 

ex) 블록이 5인데 curpage가 5인 경우

5/5 => 1 => 1*5=> 5 => 5+1=6

 

이것때문에 뭐가 문제인지도 모르고 좀 한참해맸다... 바보같군

 

 

그러면 board_main에서 값을 받아와서 처리를 해준다. 

 <ul class="pagination justify-content-start">
<!-- 이전 -->
 <c:if test="${startPage>1 }">
  <li class="page-item"><a class="page-link" href="../board/board_main.do?page=${startPage-1 }">이전</a></li>
 </c:if>  
                                
<c:forEach var="i" begin="${startPage }" end="${endPage }" step="1"> 
 <li class="page-item active"><a class="page-link" href="../board/board_main.do?page=${i }">${i }</a></li>      
</c:forEach>     

<!-- 다음 -->
 <c:if test="${endPage<totalpage}">
  <li class="page-item"><a class="page-link" href="../board/board_main.do?page=${endPage+1 }">다음</a></li>
   </c:if>
  </ul>

이게 뭐라고 참.. 오래 걸렸다. 그래도 내가 직접 이유를 찾아내서 그게 어디야 라고 위안을 삼고있다..

 

일단 오늘 배운건 여기까지 적용하고 나머지 프로젝트 완성을 위해 다른 부분을 이어서 만들도록 하겠다. 

728x90
반응형