이번에는 i-batis를 이용하여 Paging 기능을 구현해봅시다.

페이징 기능을 간단하게 정의해보자면

모든 게시글에 대해 정해진 게시글 개수만큼 페이지 번호를 매겨 뿌린다!

가 되겠습니다.

자바에서 가져온 리스트를 잘라서 보여주는 형식으로 구현해볼건데요.

저번 글에서 사용한 queryForList를 사용할겁니다. 여기에 변수가 2개 들어가는데요.

변수를 4개까지 쓸 수 있도록 오버로딩되어있습니다.

앞 두개 변수는 똑같고 세번째 변수는 페이지번호 네번째 변수는 데이터 rows 갯수입니다.

BoardDao.java에서 ("getArticleList", null, 0, 10)

을 넣고 실행해봅시다.

원래는 있는 글들 전부다 들고왔는데, 변수 2개만 추가 해보았는데 이번엔 10개만 들고 왔습니다.

세번째 변수가 페이지 번호라고 했는데요

0을 넣으면 반환값에서 0개를 제외한 다음 10개를 가져옵니다.

다음페이지를 보려면 현재 페이지 번호 + 10을 넣으면 다음 페이지를 볼 수 있습니다. (페이지당 10게시글 기준)

하지만 이 방식은 게시글 모든 List를 가져와서 짤라서 보여주는 것이므로 게시글이 엄청 많아지면 느려지게 됩니다.

그래서 DB에 날리는 질의에 파라미터를 주고 조건에 해당하는 게시글만 가져올 수 있도록 개발하는게 좋다고 합니다.

세번째 변수를 0으로 해놨는데 이 값이 유동적으로 변할 수 있게 page로 바꿉시다. 

그리고 이 메소드를 쓰는 ListAction도 바꿔주어야 겠죠?

이제 view(.jsp)에서 페이지 번호를 구현하고 동작할 수 있도록 합니다.

이번에는 이전페이지, 다음페이지만 추가해보도록하겠습니다.


list.jsp로 갑시다.

표현하기 위해 JSTL을 씁시다. Model1때 설명한 표현언어 생각나시죠?

<c:if page="${}"></c:if> 구문을 사용할겁니다.

그리고 리스트의 사이즈를 조사하기 위해 

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

소수점 처리를 위해

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

를 최상단에 넣어줍시다.


현재페이지는

   <fmt:parseNumber value="${page/10+1 }" type="number"  integerOnly="True" />


이전페이지는

<c:if test="${page > 0}"> 
<a href="list.do?page=${page-10}">이전페이지</a> 
</c:if>
<c:if test="${page == 0}"> 
<a href="#">이전페이지</a> 
</c:if>


다음페이지는

<c:if test="${fn:length( articleList ) < 10}"> 
<a href="#">다음페이지</a>
</c:if>
<c:if test="${fn:length( articleList ) == 10}"> 
<a href="list.do?page=${page+10}">다음페이지</a>
</c:if>



실행시켜보시면 아래와 같이 나오겠습니다.

위에 파라미터 값 page=10이 넘어가는거 보이시죠? 어떻게 페이징이 되는지 아실거라 생각됩니다.




































+ Recent posts