Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
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
Archives
Today
Total
관리 메뉴

우리마의 웹 개발

[Spring]페이징 처리 EgovFramework Paginationinfo 사용하기( JSP, Controller) 본문

WEB/Spring

[Spring]페이징 처리 EgovFramework Paginationinfo 사용하기( JSP, Controller)

우리마 2020. 7. 21. 16:30

안녕하세요. 지난 글에 이어서 egovFramework에서 PaginationInfo를 사용한 게시판 페이징 처리를 이어갈게요.

필요한 파일, bean등록 등은 지난 글을 참고해주세요.

https://onecutwook.tistory.com/19

 

[Spring]페이징 처리 EgovFramework Paginationinfo 사용하기( 설정)

안녕하세요. Spring 환경에서 전자정부 프레임워크에서 제공하는 PaginationInfo를 사용해서 게시판 페이징 처리를 해볼 거예요. 먼저 전자정부 프레임워크의 라이브러리(패키지)를 추가해 줘야 됩니

onecutwook.tistory.com

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
/* 게시글 조회,페이징 */
    @RequestMapping("/community")
    public String webDevCommunity(@RequestParam Map<String,Object> commandMap, Model model, HttpSession session, HttpServletRequest request) {
        PaginationInfo paginationInfo = new PaginationInfo();
        int pageNo = 1//현재 페이지 번호
        int listScale = 10// 한 페이지에 나올 글 수
        int pageScale = 5// 페이지 개수
        try {
            if(commandMap.size() > 0) {
                pageNo = Integer.parseInt((String)commandMap.get("pageNo"));//현재 페이지 번호
            }
 
            paginationInfo.setCurrentPageNo(pageNo);
            paginationInfo.setRecordCountPerPage(listScale); 
            paginationInfo.setPageSize(pageScale); 
            
            int startPage = paginationInfo.getFirstRecordIndex(); //시작 페이지
            int lastPage = paginationInfo.getRecordCountPerPage(); //마지막 페이지
            
            commandMap.put("startPage", startPage);
            commandMap.put("lastPage", lastPage);
            
            int totalList = service.getCommunityTotal(commandMap); //전체 글 개수
            paginationInfo.setTotalRecordCount(totalList);
 
            
            List<Map<String,Object>> boardList = service.selectBoardList(commandMap); //커뮤니티 글 목록
 
            model.addAttribute("pageNo",pageNo);
            model.addAttribute("boardList",boardList);
            model.addAttribute("totalList",totalList);
            model.addAttribute("paginationInfo",paginationInfo);
        } catch (Exception e) {
            logger.debug(e.getMessage());
        }
        return "community";
    }
 
cs

무조건 필요한 변수 : 현재 페이지 번호(pageNo), 한 페이지에 나올 아이템 개수(listScale), 처음과 끝 사이 페이지의 개수(pageScale), 총 아이템 개수(totalList), 시작 페이지(startPage), 마지막 페이지(lastPage)

이 값들을 최초 접속 시에 JSP단에서 Controller로 넘겨줘야 됩니다. 그래서 Line15의 if문 안에서 commandMap으로 받은 값들을 가져오고 있습니다. if문은 저의 로직에 맞게 작성되어있으므로 본인의 로직에 맞게 코딩하시면 됩니다. 중요한 건 위 변수들을 paginationInfo객체의 메서드의 파라미터 값으로 넘겨줘야 된다는 겁니다.

시작 페이지와 마지막 페이지는 Line 22,23 에서 구할 수 있습니다. 이 값들을 commandMap에 담아서 SQL을 실행할 때 LIMIT 키워드에 써줘야 됩니다.

-- SQL

limit #{startPage},#{lastPage}

 

Line29에서 전체 글 개수를 가져와서 PaginationInfo에 넘겨줍니다. 이렇게 페이징 할 값을 만들고 Line 33에서 와 같이 Service를 타면서 아이템 목록을 가져옵니다. 그리고 접속한 현재 페이지에서 현재 페이지 값을 알고 다른 페이지로 갈 때 Controller로 넘겨줘야 되므로 model 객체를 사용해서 JSP단에서 EL 식으로 쓸 수 있도록 합니다.

JSP - community.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<div class="paging">
  <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="linkPage"/>
</div>
 
<script type="text/javascript">
/* 페이징과 글 목록 조회  */
var currentPageNo = ${pageNo};
 
function linkPage(pageNo){
    location.href = "/community?pageNo=" + pageNo;
}
</script>
 
cs

Line 4: Controller에서 넘겨준 paginationInfo 객체를 paginationInfo속성에 EL식으로 적어 줍니다. jsFunction은 페이징을 실행할 javascript함수명을 적 주시면 됩니다.

Line 9 : 현재 페이지 번호를 전역 변수로 받습니다.

Line 12 : 저는 간단하게 location.href로 Controller를 호출해서 파라미터를 GET방식으로 넘깁니다. 또한 linkPage 함수에 파라미터로 pageNo를 받아야 합니다. 이것은 <ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="linkPage"/> 여기서 페이지가 호출 되면서 해당 페이지의 값이 파라미터로 들어가게 됩니다. 그리고 호출 url 파라미터로 검색 조건, 한 페이지에 나올 아이템 개수 조절 등 다양한 파라미터를 함께 Controller에 넘겨서 처리하셔도 좋습니다.

 

 

이렇게 해서 Spring환경에서 EgovFramwork의 PaginationInfo객체를 사용한 페이징 처리의 기본을 알아 보았습니다. Service단과 SQL 등은 각자의 로직에 맞게 코딩하면 되기 때문에 따로 언급은 하지 않았습니다. div의 class 또한 저의 css이기 때문에 각자의 프로젝트에 맞게 디자인하시길 바랍니다. 중요한 건 현재 페이지 번호를 Controller와 JSP에서 알아야 된다는 거고, 시작 페이지와 마지막 페이지를 SQL에서 Limit키워드에 사용해야 된다는 겁니다.

 

즐겁지않은 즐거운 코딩 하세요~

Comments