Jsp-MVC2- ListAction, paging(페이징)

2020. 8. 10. 20:32JSP-MVC model2

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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
package action;
 
import java.util.ArrayList;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import svc.BoardListService;
import vo.ActionForward;
import vo.BoardDTO;
import vo.PageInfo;
 
public class BoardListAction implements Action {
 
    @Override
    public ActionForward execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
        
        //BoardListService 클래스를 통해 게시물 전체 목록을 조회하여
        //조회된 결과를 request 객체에 저장 후 qna_board_list.jsp 페이지로 포워딩
        System.out.println("BoardListAction");
        
        request.setCharacterEncoding("utf-8");
        
        ActionForward forward=null;
        
        // 페이징 처리를 위한 변수 선언
        
        int page=1;// 현재 페이지 번호를 저장할 변수
        int limit=10;// 한 페이지에 표시할 게시물 수
        
        // 전달된 request 객체의 파라미터 중 "page" 파라미터가 null 이 아닐 경우
        // 해당 파라미터 값을 page 변수에 저장
        if(request.getParameter("page"!= null) {
            page=Integer.parseInt(request.getParameter("page"));
        }
        
        //BoardListService 클래스의 인스턴스 생성
        BoardListService boardListService=new BoardListService();
        
        // 전체 게시물 수 조회를 위해 BoardListService 객체의 getListCount() 메서드 호출
        // 파라미터 : 없음, 리턴타입 : int(listCount)
        int listCount=boardListService.selectListCount();
        
        // 전체 게시물 목록 조회를 위해 BoardListService 객체의 getArticleList() 메서드 호출
        // 파라미터 : 현재 페이지번호(page), 페이지당 게시물 수(limit)
        // 리턴타입 : ArrayList<BoardDTO> (articleList)
        ArrayList<BoardDTO> articleList=boardListService.getArticleList(page,limit);
        
        //페이지 목록 처리를 위한 계산 작업
        // 1.전페 페이지 수 계산( 총 게시물 수/ 페이지 당 게시물 수+ 0.95)
        int maxPage=(int)((double)listCount/limit+0.95);//소수점 둘째자리 반올림을 위해 0.95
        
        // 2.현재 페이지에서 보여줄 시작 페이지 번호(1,11,21,... 등)
        int startPage=((int)((double)page/10+0.9)-1)*10+1;
        
        // 3.현재 페이지에서 보여줄 끝 페이지 번호(10,20,30,...등)
        int endPage=startPage+10-1;
        
        // 4. 마지막 페이지가 현재 페이지에서 표시할 최대 페이지 수 (전체 페이지 수) 보다
        // 클 경우 마지막 페이지 번호를 전체 페이지 번호로 교체
        if(endPage>maxPage) {
            endPage=maxPage;
        }
        
        // 계산된 페이지 정보들을 PageInfo 객체에 저장
        PageInfo pageInfo=new PageInfo(page, maxPage, startPage, endPage, listCount);
        
        // 페이지 정보 객체(PageInfo) 와 게시물 목록 저장된 객체(ArrayList<BoardDTO>) 를 
        // request 객체의 setAttribute() 메서드로 저장
        request.setAttribute("pageInfo", pageInfo);
        request.setAttribute("articleList", articleList);
        
        // ActionForward 객체 생성 후 board 폴더의 qna_board_list.jsp 페이지로 포워딩
        // -> 서블릿 주소를 유지하고, request 객체를 유지해야하므로 Dispatch 방식 포워딩
        forward=new ActionForward();
        forward.setPath("/board/qna_board_list.jsp");
//        forward.setRedirect(false);// 기본값이므로 생략가능.
        
        return forward;
    }
 
}
 
cs

글 목록을 ArrayList로 넘겨받는데 DAO에서 작업한 값을 저장한 Service에서 리턴 값으로 넘겨받아서 그대로 표현해 준다. 그리고 이 곳에서 페이징 기법을 활용해서 게시글의 목록수를 정해주고 다음 페이지와 이전 페이지를 정해준다.  이 곳에선 글목록이 다음 페이지로 넘어가기 때문에 정보를 저장한 상태에서 이동하기 때문에 request.setAttribute()로 값을 생성하여 저장한 후 이동도 Dispatch방식으로 포워딩하게 값을 지정해 준다.

 

'JSP-MVC model2' 카테고리의 다른 글

Jsp-MVC2-PageInfo  (0) 2020.08.10
Jsp-MVC2-ListSerivice  (0) 2020.08.10
Jsp-MVC2- ProService  (0) 2020.08.10
Jsp-MVC2-WriteProAction  (0) 2020.08.10
Jsp-MVC2-JdbcUtil  (0) 2020.08.10