입사 초기에 선임들이 짜놓은것들 보고 복붙 하고....
그것 마저 잘 안되서 선임들이 마무리 해주었던 터라...
머릿속에 잘 자리 잡지 않은 PaginationInfo 사용법인데요
PaginationInfo를 사용하기 위해서는 설정을 해주셔야 하는데
제 컴퓨터는 물려받은거 이기도 하구 maven이나 다른 설정들은
제가 안해서 사실 잘 모르지만
사용방법은 야무지게 공부 했기 때문에
사용 방법 위주로 설명 해드리겠습니다.
일단 페이징 처리에서 제일 중요한건
아래 네가지 항목인데요.
* currentPageNo : 현재 페이지 번호
* recordCountPerPage : 한 페이지당 게시되는 게시물 건 수
* pageSize : 페이지 리스트에 게시되는 페이지 건수,
* totalRecordCount : 전체 게시물 건 수.
Java에서 PaginationInfo를 선언하면 볼 수있는 항목들입니다.
저는 dao와 vo,controller, jsp, sql.xml에다가 만 코딩을 했습니다.
먼저 vo입니다.
여러분들의 프로젝트에 필요한 vo값들
+
int startPage;
int lastPage;
vo에 startPage와 lastPage를 선언해줍니다.
vo는 여기서 끝이구요.
다음은 dao입니다.
(원랜 controller에다가 바로 하는게 좋긴한데 전 controller가 복잡해지는걸 별로 안좋아해서 dao에다가 했습니다)
/**
* 페이징
* */
// 페이징
public Map<String,Object> getPage(int currentPageIndex) throws Exception{
PaginationInfo page = new PaginationInfo();
int pageNo = 1; //처음 현재페이지
int listScale = 20; //한 페이지에 나올 글 수 //변수 받아서 지정 할 수도 있음
Map<String,Object> map = pageCnt(listScale); //아래 함수에서 값 가져오기
//가져온 값 세팅하기
//(아래 함수의 결과값이 {pageScale=?,totalCnt=?} 이런식으로 나와서 key로 값 가져오기
int pageScale = Integer.parseInt(String.valueOf(map.get("pageScale"))); //페이지갯수
int totalList = Integer.parseInt(String.valueOf(map.get("totalCnt")));; //게시글 총 갯수
//-----------필수입력값 설정하는부분 시작------------
page.setCurrentPageNo(currentPageIndex > 0 ? currentPageIndex : pageNo); //현재페이지
page.setRecordCountPerPage(listScale);
page.setPageSize(pageScale);
page.setTotalRecordCount(totalList);
//-----------필수입력값 설정하는부분 끝------------
//paginationInfo에 getFirstRecordIndex()라는 함수가 있어서 자동으로 계산해줌
int firstIndex = page.getFirstRecordIndex();
// int lastIndex = page.getLastRecordIndex();
map.put("paginationInfo", page);
map.put("firstIndex",firstIndex); //페이지에 표출될 리스트의 시작번호 지정
map.put("lastIndex", listScale); //페이지에 표출될 리스트 갯수
return map;
}
// 총 페이지 수 구하기
//(아래 쿼리의 결과값이 맵에 담으면 {pageScale=?,totalCnt=?} 이런식으로 나옴
public Map<String,Object> pageCnt(int listScale) throws Exception{
return sqlSession.selectOne("post.pageCnt",listScale);
}
위 코드를 보시면 일단 return은
넘겨줄게 여러개다 보니 map으로 해주었구요.
controller입니다. dao와 같이 보면서 코딩하시면 좋아요!
@RequestMapping("/board.do")
public String board(HttpServletRequest request ,Model model,@ModelAttribute BoardVO boardVO,
@ModelAttribute BoardSearchVO searchVO) throws Exception{
if(boardVO != null) {
// 페이징 넘버를 누르면 받아오는 값 (맨처음엔 값을 안받아와서 @RequestParam으로 선언 안함)
String param = request.getParameter("pageIndex");
//dao에서 return한 map을 받아오는 곳 + 위 값의 여부를 판단해서 dao로 넘겨주는곳
Map<String,Object> map = boardDAO.getPage(param !=null && param != ""? Integer.parseInt(param) : 0);
//dao에서 retrun한 map에서 paginationInfo 값을 꺼내서 저장하는 부분
PaginationInfo page = (PaginationInfo) map.get("paginationInfo");
//vo에 startPage와 lastPage를 저장하는 부분
boardVO.setStartPage(Integer.parseInt(String.valueOf(map.get("firstIndex"))));
boardVO.setLastPage(Integer.parseInt(String.valueOf(map.get("lastIndex"))));
//vo를 가지고 게시글 리스트를 조회하는 부분
List<BoardVO> ls = boardDAO.selectPostList(boardVO);
//조회한 값, paginationInfo값, 조회할때 조건으로 입력했던 값(생략가능)
model.addAttribute("pols",ls);
model.addAttribute("paginationInfo",page);
model.addAttribute("searchVO",searchVO); //(생략가능)
}
//jsp
return "/board";
}
jsp에 페이징 넘버를 표출 할 부분에 이렇게 코딩 해 주세요.
<nav aria-label="Page navigation example">
<ul class="pagination justify-content-center">
<ui:pagination paginationInfo="${paginationInfo}" type="image" jsFunction="linkPage" />
</ul>
</nav>
그러면
아래 사진처럼 나오는데 저 버튼을
누르세요
그럼 아래 사진처럼
이렇게 pageIndex값이 넘어가서
결국
-> controller에서 받아가지구 그 받은값을 null체크 해서 dao로 넘겨서
-> dao에서 페이지에 표출될
리스트수, 페이지 개수((게시글 총 개수/표출될 리스트수)+1), 게시글 총 개수, 현재 페이지 번호 를 선언해서
paginationInfo에 각각 set을 해줍니다.
startPage와 lastPage도 각각 챙겨서
map으로 모두 컨트롤러로 리턴 해줍니다.
-> 그렇게 컨트롤러에 넘어온 map에서 각 값을 꺼내서 vo와 pagination에 각각 선언 및 set해주고
-> sql.xml에서 리스트를 조회할때 리미트 조건을 걸어줍니다.
ex) select no, id, title, ......... from board where ........ order by no LIMIT #{startPage}, #{lastPage}
이렇게 말이죠..
이제 테스트 하는 일만 남았네용
리스트 테이블에 한 100 개 데이터 넣어서 해보세요~!
궁금한점, 이해안가는점, 지적할 부분 있으시면 댓글로 작성해주시면
틈틈히 확인해서 답글 달아드리겠습니다.
이상입니다.
'Spring Framework' 카테고리의 다른 글
[spring][java]비속어,금칙어 정제 후 db저장 (0) | 2022.04.05 |
---|---|
[java]Controller에서 ajax로 값 리턴하는법 (0) | 2022.04.05 |
[JAVA]textarea에 개행 적용하기 (0) | 2022.04.04 |