페이징 기능 구현하기(Paging)

2017. 7. 18. 13:51
반응형

* 페이징 기능 구현하기(Paging)


-페이징


기존 페이징은 보통 egovFramework를 많이 사용하여 작업을 진행하였기 때문에 매우 간단히 

처리하였던 기억들이 있다. egovFramework(전자정부) 를 사용하지 않고 오랜만에 페이징 기능을

생성하려다보니 해매기일수고 시간을 많이 허비하는일이 반복되며

소스가 많이 꼬이는 상황을 발견했다.

여러 방법을 생각하던 도중 지인의 팁으로 좀더 편리한 방법을 쓰게되었다.

이는 JSON 등을 전혀 사용하지않고도 페이징을 간편히 만들수 있는방법이며 

해당 자료를 쉽게 이용 할수 있는 장점이있다.

또한 쿼리문만 잘손봐준다면 큰데이터도 속도 및 과부하역시 발견하지않는것을 확인하였다.

자바 클래스 및 JSTL로 작성하였으며

자세한 설명은 주석을 참고하면된다.

 


Controller

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
                
            //한 페이지 당 보여줄 수 
             final int pageSize = 10;
             //페이지 수 
             final int pageGroupSize = 10;
 
                 String pageNum = request.getParameter("pageNum");//페이지 번호
     
             if (pageNum == null) {
                 pageNum = "1";
             }
             
            int currentPage = Integer.parseInt(pageNum);
             int startRow = (currentPage - 1* pageSize + 1;//한 페이지의 시작글 번호
             int endRow = currentPage * pageSize;//한 페이지의 마지막 글번호
             int count;
        
             int number=0;
 
            //테이블
             List<List_V> Table_V = new ArrayList();
             count = Dao.getTotalCnt();//전체 글의 수
             
             if (count > 0) {        
                     if(endRow>count)
                             endRow = count;
                     Table_V = Dao.getTDetail(startRow,endRow);//현재 페이지에 해당하는 글 목록
                 
             } else {
                 Table_V = null;
             }
                     
                     number=count-(currentPage-1)*pageSize;//글목록에 표시할 글번호
                     //페이지그룹의 갯수 
                     //ex) pageGroupSize가 3일 경우 '[1][2][3]'가 pageGroupCount 개 만큼 있다.  
                    int pageGroupCount = count/(pageSize*pageGroupSize)+( count % (pageSize*pageGroupSize) == 0 ? 0 : 1);
                     //페이지 그룹 번호 
                 //ex) pageGroupSize가 3일 경우  '[1][2][3]'의 페이지그룹번호는 1 이고  '[2][3][4]'의 페이지그룹번호는 2 이다.
                     int numPageGroup = (int) Math.ceil((double)currentPage/pageGroupSize);
 
              //해당 뷰에서 사용할 속성
             request.setAttribute("currentPage"new Integer(currentPage));
             request.setAttribute("startRow"new Integer(startRow));
             request.setAttribute("endRow"new Integer(endRow));
             request.setAttribute("count"new Integer(count));
             request.setAttribute("pageSize"new Integer(pageSize));
             request.setAttribute("number"new Integer(number));
             request.setAttribute("pageGroupSize"new Integer(pageGroupSize));
             request.setAttribute("numPageGroup"new Integer(numPageGroup));
             request.setAttribute("pageGroupCount"new Integer(pageGroupCount));
             request.setAttribute("Table_V", Table_V);
               
 
 
            return "View";
 
 
 
 
 
cs




JSP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<!-- 카운트가 0이상일떄만 -->
<c:if test="${count > 0}">
   <c:set var="pageCount" value="${count / pageSize + ( count % pageSize == 0 ? 0 : 1)}"/>
   <c:set var="startPage" value="${pageGroupSize*(numPageGroup-1)+1}"/>
   <c:set var="endPage" value="${startPage + pageGroupSize-1}"/>
   
   <c:if test="${endPage > pageCount}" >
     <c:set var="endPage" value="${pageCount}" />
   </c:if>
   
 
<!-- << 처음으로 < 이전으로 -->  
   <c:if test="${numPageGroup > 1}">
        <a href="./View?pageNum=1">[<<]</a>
        <a href="./View?pageNum=${(numPageGroup-2)*pageGroupSize+1 }">[<]</a>
   </c:if>
  
 
 
   
  <c:forEach var="i" begin="${startPage}" end="${endPage}">
       <a href="View?pageNum=${i}">[
        <font color="#000000" />
          <c:if test="${currentPage == i}">
          <font color="#bbbbbb" />
        </c:if>
        ${i}
       </font>]
       </a>
  </c:forEach>
 
 
 <!-- 소수점 형태이므로 인트형태로 변경  --> 
   <fmt:parseNumber var="maxPage"  value="${pageCount}" /
 
<!-- >> 맨뒤로 > 다음으로 -->
   <c:if test="${numPageGroup < pageGroupCount}">
      <a href="./View?pageNum=${numPageGroup*pageGroupSize+1}">[>]</a>
        
      <a href="./View?pageNum=${maxPage}">[>>]</a>
  
   </c:if>
</c:if>
cs






반응형

BELATED ARTICLES

more