안녕하세요. 저번 챕터에서는 간단한 CRUD 기능을 구현했었죠.
오늘 추가할 기능은 페이징 기능입니다.
우리가 전체 게시글을 조회할 때 모든 게시물을 하나의 화면에 보여주었습니다.
이렇게 할 경우 개발하는 우리 입장에서는 아주 편합니다.
그러나 사용자 입장에서 가독성은 아주 떨어지죠.
웹 애플리케이션에서 페이징 처리는 필수입니다.
우선 저희는 Controller에서 페이징을 처리해 줄 겁니다.
일단 구현해 보고 문제점을 찾아야죠.
리팩토링해서 더 효율적인 방향으로 고쳐볼게요.
페이징 처리를 하는데 있어서 고려해야할 사항은 무엇이 있을까요.
우선 게시판에서 페이지라는 것이 어떤 기능을 하는지 생각해봅시다.
게시판에서 페이지는 게시글을 정해진 숫자로 나눠서 보여주는 기능입니다.
그리고 페이지 번호를 클릭하면 해당하는 페이지로 이동해서 게시글을 조회할 수 있죠.
위 그림을 보았을 때 페이징 처리를 하는데 필요한 정보를 네 가지로 나눌 수 있겠네요.
1. 페이지 당 보여줄 게시물의 갯수 (row = 3)
2. 페이지의 갯수 (totalpage = 4)
3. 게시물의 전체 갯수
4. 현재 사용자가 머물고 있는 페이지(nowpage)
위 네가지의 정보만 알고 있다면 페이징 처리는 어렵지 않습니다.
우선 컨트롤러의 소스를 살펴봅시다.
위의 소스에서 페이징 처리에 사용되는 코드만 따로 빼면 다음과 같아요.
처리과정은 아래와 같습니다.
1. temp라는 변수에 전체 게시물 목록을 담아준다.
2. 전체 페이지 수를 구한다.
3. 해당 페이지에 해당하는 객체들만 따로 list 변수에 담아준다.
여기서 생각해봐야할 점은 전체 페이지의 갯수입니다.
쉽게 row로 전체 게시물의 갯수를 나눈다고 생각할 수 있는데.
만약 게시물이 13개 라면 전체 페이지의 갯수는 4개가 됩니다.
이때 게시물 한개가 누락되죠.
그래서 다시 % 연산자를 이용해서 나눈 후에 나머지가 0 이상이라면 1을 덧셈합니다.
그러면 전체 페이지의 갯수는 5개가 되겠죠.
아래는 jsp 파일의 소스코드입니다.
jstl을 이용한 조건문과 foreach 문이 적용되었습니다.
사실 이것은 완벽한 페이징 처리가 아닙니다.
아마 게시물의 갯수에 따라서 마지막 페이지로 갔을 떄 오류가 나기도 하고 되기도 할겁니다.
왜냐하면 마지막 페이지의 경우에는 동작에서 경우의 수가 두가지 있기 때문입니다.
1. row로 나눈 나머지가 0인 경우 ------> 정상 동작 된다.
2. row로 나눈 나머지가 0 이상인 경우 -------> 에러가 뜬다.
2의 경우에 에러가 뜹니다.
왜냐하면 컨트롤러에서 페이지의 게시물을 무조건 3개씩 view로 보내주기 때문이에요.
지금 상황에서는 마지막 페이지의 게시물 수가 1개이거나 2개이더라도 그 수에 맞게 view로 보내주고 있지 않아요.
그래서 에러가 뜹니다.
(지금은 jsp파일에서 totalpage에 -1을 해줘서 에러를 막고 있어요. 에러를 확인하고 싶다면 totalpage-1에서 -1을 제거해보세요)
우선 다음 시간에 검색기능을 구현하고요.
그 다음에 문제점을 고치도록 할게요. 수고하셨습니다.
'Spring Framework 개발 일지 > Spring으로 게시판 만들기' 카테고리의 다른 글
FirstSpringBoard#6-3] 마지막 페이지에 대한 페이징 처리 (0) | 2017.09.05 |
---|---|
FirstSpringBoard#6-2] 검색 기능 비즈니스 로직 구현 (0) | 2017.09.05 |
FirstSpringBoard#5-5] 게시물 삭제 기능 구현 (0) | 2017.09.01 |
FirstSpringBoard#5-4] 게시물 수정 기능 구현 (0) | 2017.09.01 |
FirstSpringBoard#5-3] 특정 게시글 조회 기능 구현 (0) | 2017.08.31 |