[Jsp] Jsp 페이징처리

2014. 4. 2. 11:11프로그래밍/Jsp

<%
//페이징 파라미터 셋팅
//조건 추가시 여기에 추가해준다.
String pageParameter = "srchStatus=" + srchStatus;
pageParameter += "&page_per_record_cnt=" + page_per_record_cnt;
pageParameter += "&srchKeyword=" + srchKeyword;
pageParameter += "&orderbyType=" + orderbyType;
pageParameter += "&orderbyStatus=" + orderbyStatus;
pageParameter += "&srchSDate=" + srchSDate;
pageParameter += "&srchEDate=" + srchEDate;
pageParameter += "&ListdocKind=" + ListdocKind;

%>
<%--처음 --%>
<td nowrap>
       <font class='page_no'>
             <a href="List.jsp?pageno=1&<%=pageParameter %>">
                  처음
             </a>
       </font>
</td>
<%--처음 --%>
<%--이전 --%>
<td nowrap class ='no_dot'></ td>
<td nowrap>
       <a href="List.jsp?pageno=<%=pageno-1 %>&<%= pageParameter %>">
             이전
       </a>
</td>
<%--이전 --%>
<%--페이지번호 --%>
<td nowrap>
       <font class='no_choice'>
             <%for( int i =page_sno;i<=page_eno;i++){%>
             <a href="List.jsp?pageno=<%=i %>&<%= pageParameter %>">
                   <%if(pageno == i){ %>
                        [ <%=i %> ]
                   <%}else{ %>
                         <%=i %>
                   <%} %>
             </a>
             <%--  여백   --%>  
                   <%if(i<page_eno){ %>
                         &nbsp;
                   <%} %>
             <%} %>
       </font>
</td>
<%--페이지번호 --%>
<td nowrap class ='no_dot'></ td>
<%--다음 --%>
<td nowrap>
       <a href= "List.jsp?pageno=<%=pageno+1 %>&<%= pageParameter %>">
             다음
       </a>
</td>
<%--다음 --%>
<td nowrap class ='no_dot'></ td>
<%--마지막 --%>
<td nowrap>
       <a href="List.jsp?pageno=<%=total_page %>&<%= pageParameter %>">
             <font class='page_no'>
                   nbsp;마지막
             </font>
       </a>
</td>
<%--마지막 --%>

<td align='right' width='1%' nowrap>
  현재 <font class='no_choice'> <%=pageno %> </font>
 <%=total_page %>
  <%=total_page %>
</td>
</tr>

===================================================================================================================================================================



<%!
       public Integer toInt(String x){
             int a = 0;
             try{
                  a = Integer.parseInt(x);
            } catch(Exception e){}
             return a;
      }
%>
<%
       int pageno = toInt(request.getParameter("pageno"));
       if(pageno<1){//현재 페이지
            pageno = 1;
      }
      
       int total_record = 100;              //총 레코드 수
       int page_per_record_cnt = 10;
       int group_per_page_cnt =10;     //페이지 당 보여줄 번호 수[1],[2],[3],[4],[5]
//                                                                                    [6],[7],[8],[9],[10]                                                              

       int record_end_no = pageno*page_per_record_cnt;                   
       int record_start_no = record_end_no-(page_per_record_cnt-1);
       if(record_end_no>total_record){
            record_end_no = total_record;
      }
                                                              
                                                              
       int total_page = total_record / page_per_record_cnt + (total_record % page_per_record_cnt>0 ? 1 : 0);
       if(pageno>total_page){
            pageno = total_page;
      }


      

//    현재 페이지(정수) / 한페이지 당 보여줄 페지 번호 수(정수) + (그룹 번호는 현재 페이지(정수) % 한페이지 당 보여줄 페지 번호 수(정수)>0 ? 1 : 0)
       int group_no = pageno/group_per_page_cnt+( pageno%group_per_page_cnt>0 ? 1:0);
//          현재 그룹번호 = 현재페이지 / 페이지당 보여줄 번호수 (현재 페이지 % 페이지당 보여줄 번호 수 >0 ? 1:0)      
//    ex)   14          =     13(몫)            =      (66 / 5)         1     (1(나머지) =66 % 5)                  
      
       int page_eno = group_no*group_per_page_cnt;           
//          현재 그룹 끝 번호 = 현재 그룹번호 * 페이지당 보여줄 번호
//    ex)   70          =     14    *     5
       int page_sno = page_eno-(group_per_page_cnt-1); 
//          현재 그룹 시작 번호 = 현재 그룹 끝 번호 - (페이지당 보여줄 번호 수 -1)
//    ex)   66    =     70 -  4 (5 -1)
      
       if(page_eno>total_page){
//       현재 그룹 끝 번호가 전체페이지 수 보다 클 경우           
            page_eno=total_page;
//       현재 그룹 끝 번호와 = 전체페이지 수를 같게
      }
      
       int prev_pageno = page_sno-group_per_page_cnt;  // <<  *[이전]* [21],[22],[23]... [30] [다음]  >>
//          이전 페이지 번호  = 현재 그룹 시작 번호 - 페이지당 보여줄 번호수      
//    ex)         46          =     51 - 5                        
       int next_pageno = page_sno+group_per_page_cnt;  // <<  [이전] [21],[22],[23]... [30] *[다음]*  >>
//          다음 페이지 번호 = 현재 그룹 시작 번호 + 페이지당 보여줄 번호수
//    ex)         56          =     51 - 5
       if(prev_pageno<1){
//          이전 페이지 번호가 1보다 작을 경우        
            prev_pageno=1;
//          이전 페이지를 1로
      }
       if(next_pageno>total_page){
//          다음 페이지보다 전체페이지 수보가 클경우        
            next_pageno=total_page/group_per_page_cnt*group_per_page_cnt+1;
//          next_pageno=total_page
//          다음 페이지 = 전체페이지수 / 페이지당 보여줄 번호수 * 페이지당 보여줄 번호수 + 1
//    ex)                  =  76 / 5 * 5 + 1    ????????          
      }
      
       // [1][2][3].[10]
       // [11][12]
%>

[출처] yangyag  블로그