본문 바로가기
공부/Spring

[Spring] 게시판 만들기 : 페이징 처리

by students 2022. 9. 10.

1) BoardController.java

 

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
    @RequestMapping("mainPage")
    public String mainPage(Model model, @RequestParam(value = "pageNum", defaultValue = "1"int pageNum) {
        ArrayList<HashMap<String, Object>> dataList = boardService.getBoardList(pageNum);
 
        int count = boardService.getBoardCount();
        
        int totalPageCount = (int)Math.ceil(count/10.0);
        
        // 1 2 3 4 5 , 6 7 8 9 10
        int startPage = ((pageNum-1)/5)*5 + 1;
        int endPage = ((pageNum-1)/5 + 1)*(5);
        if(endPage > totalPageCount){
            endPage = totalPageCount;
        }
 
        model.addAttribute("count", count);
        model.addAttribute("startPage", startPage);
        model.addAttribute("endPage", endPage);
        model.addAttribute("currentPage", pageNum);
        model.addAttribute("totalPageCount", totalPageCount);
        
        model.addAttribute("dataList", dataList);
 
        return "board/mainPage";
    }
cs

 

2) BoardService.java

 

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
    public ArrayList<HashMap<String, Object>> getBoardList(int pageNum) {
 
        ArrayList<HashMap<String, Object>> dataList = new ArrayList<HashMap<String, Object>>();
 
        ArrayList<BoardVo> boardVoList = boardSQLMapper.getBoardList(pageNum);
 
        for (BoardVo boardVo : boardVoList) {
 
            int userNo = boardVo.getUser_no(); // 작성자 번호...
            UserVo userVo = userSQLMapper.getUserByNo(userNo); // SELECT * FROM FP_MEMBER WHERE member_no = #{no}
            
            HashMap<String, Object> map = new HashMap<String, Object>();
            map.put("userVo", userVo);
            map.put("boardVo", boardVo);
 
            // 현재 글이...지금시간 -3 시간 보다 클때...
            Date writeDate = boardVo.getBoard_writedate();
            long writeTime = writeDate.getTime();
 
            long currentTime = System.currentTimeMillis();
            long targetTime = currentTime - 1000 * 60 * 60 * 3;
 
            if (writeTime > targetTime) {
                map.put("newKeyword"true);
            }
 
            dataList.add(map);
        }
 
        return dataList;
 
    }
 
    public int getBoardCount() {
        return boardSQLMapper.getBoardCount();
    }
cs

 

3) BoardSQLMapper.java

 

1
2
3
4
5
    /*게시글 목록 출력 (1개행일떄는 단일객체 리턴 1개이상일떈 ArrayList 리턴)*/
    public ArrayList<BoardVo> getBoardList(int pageNum); 
 
    /*총 게시글 갯수*/
    public int getBoardCount();
cs

 

4) BoardSQLMapper.xml

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    <select id="getBoardList" resultType="com.spring.example.vo.BoardVo">
        SELECT t2.* FROM (
            SELECT t1.* , ROWNUM AS rnum FROM (            
                SELECT fb.* FROM EXAMPLE_BOARD fb , EXAMPLE_USER fm 
                WHERE fb.user_no = fm.user_no ORDER BY fb.board_no DESC
            ) t1
        ) t2
        
        <![CDATA[ 
        WHERE t2.rnum >= (#{pageNum} - 1* 10 + 1 
        AND t2.rnum <= #{pageNum} * 10                
        ]]>        
    </select>
    
    <select id="getBoardCount" resultType="int">
        SELECT COUNT(*
        FROM EXAMPLE_BOARD fb , EXAMPLE_USER fm
        WHERE fb.user_no = fm.user_no
    </select>
cs

 

5. mainPage.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
44
45
46
47
48
                <div class="row mt-3">
                    <div class="col-5"></div>
                    <div class="col">
                        <nav aria-label="...">
                            <ul class="pagination mb-0">
                                <c:choose>
                                    <c:when test="${startPage <= 1}">
                                        <li class="page-item disabled">
                                            <a class="page-link">&lt;</a>
                                        </li>
                                    </c:when>                                
                                    <c:otherwise>
                                        <li class="page-item">
                                            <a class="page-link" href="./mainPage?pageNum=${startPage-1 }${additionalParam}">&lt;</a>
                                        </li>
                                    </c:otherwise>
                                </c:choose>
                                
                                <c:forEach begin="${startPage}" end="${endPage}" var="i">
                                    <c:choose>
                                        <c:when test="${currentPage == i}">
                                            <li class="page-item active">
                                                <a class="page-link" href="./mainPage?pageNum=${i}${additionalParam}">${i}</a>
                                            </li>
                                        </c:when>
                                        <c:otherwise>
                                            <li class="page-item">
                                                <a class="page-link" href="./mainPage?pageNum=${i}${additionalParam}">${i}</a>
                                            </li>
                                        </c:otherwise>
                                    </c:choose>
                                </c:forEach>
                                <c:choose>
                                    <c:when test="${endPage >= totalPageCount}">
                                        <li class="page-item disabled">
                                            <a class="page-link">&gt;</a>
                                        </li>
                                    </c:when>
                                    <c:otherwise>
                                        <li class="page-item">
                                            <a class="page-link" href="./mainPage?pageNum=${endPage+1 }${additionalParam}">&gt;</a>
                                        </li>
                                    </c:otherwise>
                                </c:choose>
                            </ul>
                        </nav>
                    </div>
                </div>
cs

 

6) 실행화면

댓글