Java

[Java] 게시판 페이징(Paging) 로직

dev.mk 2017. 12. 12. 14:42
반응형

페이징로직 쉽지 않다~


이론적으로 분석하는 것 보다 

직접 실행하면서 중간중간 변수에 println 찍으면서 보면 이해의 도움이 된다.


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
    public static void main(String[] args) {
        
        /* Method로 작성시 받아야하는 Parameter 4가지 */
        String listUrl = "bbsList.do"//게시판 리스트 url
        Integer total = 151//게시판글 총 카운트 수
        Integer page = 1// 현재 페이지
        Integer row = 10// 보여질 행의 수 (기본 10줄)
        
        //return할 페이징 태그
        String pagingNavi = "";
        
        int pages = (total == 0) ? 1 : (int) ((total - 1/ row) + 1// * 정수형이기때문에 소숫점은 표시안됨
        int blocks;
        int block;
        int firstPage;
        int lastPage;
        blocks = (int) Math.ceil(1.0 * pages / 10.0); // *소숫점 반올림
        block = (int) Math.ceil(1.0 * page / 10.0); // *소숫점 반올림
        
        firstPage = (block - 1* 10 + 1;
        lastPage = block * 10;
        
        
        if (lastPage > pages){
            lastPage = pages;
        }
        
        //<START>
        pagingNavi = "[처음목록으로]"// listUrl+"&page = 1" 고정
        
        if(block > 1){
            pagingNavi += "[이전목록으로]"//listUrl+"&page="+(firstPage-1)
        }
            
        for(int i=firstPage; i <= lastPage; i++){
            if(page == i) { // * 현재 페이지 이자 내가 클릭한 페이지일때
                pagingNavi += "[_"+page+"_]"//listUrl+"&page="+page
            }else{
                pagingNavi += "["+i+"]"//listUrl+"&page="+i
            }
        }
            
        //blocks가 block 보다 크면  ++ 아래 태그를 생성함 
        if(block < blocks){
            pagingNavi += "[다음목록으로]"//listUrl+"&page="+(lastPage+1)
        }
    
        //<END>
        pagingNavi += "[마지막목록으로]"//listUrl+"&page="+pages
        
        System.out.println(" pagingNavi : "+pagingNavi);
        
    }
cs

출력결과  

pagingNavi : [처음목록으로][_1_][2][3][4][5][6][7][8][9][10][다음목록으로][마지막목록으로]


1. 실제로 사용할 땐 a태그 형태로 그려야 한다.  "<a href="+listUrl+&page=">

2. pagingNavi을 리턴하는 String형 method로 만든 뒤 컨트롤러 model 담고 view단(.jsp)에 쓰면된다.

ex) 담을곳.("pagingNavi"test.getPaging(int형 total, int형page , int형row, String형 listUrl) ); ==> ${pagingNavi}



반응형