JSP Servlet 페이징 구현하기(2) JSP + Oracle
- JSP
- 2018. 11. 11. 01:03
페이징을 구현하기 위해
먼저 페이징 VO를 만들어 줬다.
위처럼 6개의 필드를 생성해줬다. 위에 VO는
공통 VO이다. 각 페이지마다 페이징이 다르기 때문에
공통으로 뺀 후 아래처럼 다른 VO에서 CmmnVO를
상속받아 사용하게 했다.
이제 게시글 리스트 커맨드를 보자.
(page 값의 출처는 맨 아래에 있다)
화면단에서 넘어온 "page"를 받아 parsePage에 넣은 후
null값이면 1을 넣어줬는데 게시판의 현재 위치한
page에 값이 없다면 1페이지로 이동할 수 있게하기 위함이다.
다음 CmmnVO에서 page를 long으로 선언했기 때문에
String형은 parsePage를 long으로 형변환 시켜줬다.
다음 ArrayList의 PagingList를 만들어 줬다.
BoardDto에는 게시글에 들어갈
글 번호, 글 내용, 글 제목 등이 들어가있다.
그리고 setAttribute를 이용해 DB에서 뽑아온
게시글 값 들을 화면에 뿌려준다.
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 | public ArrayList<BoardDto> PagingList(PagingVO pagingVO) throws Exception { ArrayList<BoardDto> PagingList = new ArrayList<BoardDto>(); Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; try{ connection = dataSource.getConnection(); String query = "select a.* from ( select a.*, ROWNUM rnum, FLOOR((ROWNUM-1)/10)+1 pageNumber from( select bid, btitle, bcontent, bWriter from board where yn='Y' order by bid desc)a)a where a.pageNumber = ? order by a.rnum"; preparedStatement = connection.prepareStatement(query); preparedStatement.setInt(1, (int)(pagingVO.getPage())); resultSet = preparedStatement.executeQuery(); while(resultSet.next()){ int bId = resultSet.getInt("bId"); String bTitle = resultSet.getString("bTitle"); String bContent = resultSet.getString("bContent"); String bWriter = resultSet.getString("bWriter"); BoardDto boardDto = new BoardDto(bId, bTitle, bContent, bWriter); PagingList.add(boardDto); } }catch(Exception e){ e.printStackTrace(); }finally{ if(resultSet != null){resultSet.close();} if(preparedStatement != null){preparedStatement.close();} if(connection != null){connection.close();} } return PagingList; } | cs |
위는 BoardDao의 PagingList이다.
2line에서 ArrayList형식의 PagingList객체를 만들어줬다.
다음 8line의 쿼리문이다. 이 쿼리문은
http://rwd337.tistory.com/83?category=650717
내 블로그의 SPRING 페이징에서 사용했던
쿼리문을 그대로 가져와 사용했다.
조금 수정된 부분이라면
원래는 아래와 같이 #을 이용한 파라미터가 들어가있다.
마이바티스에서는 parameterType 을 이용해
PagingVO안의 값들을 쉽게 넣어줄 수 있다.
하지만 지금은 마이바티스를 사용하지 않기때문에
아래와같이 직접 값을 넣어줬다.
원래는 PagingVO 에서 선언한 2값이
들어가야 하지만
2대신 10을넣어 게시글이
10개씩 리스트에 출력되도록 했다.
page값도 마찬가지다.
아래처럼 #파라미터를 통해 마이바티스에서는
page값이 들어가지지만
현재는 마이바티스를 사용하지 않으므로
직접 넣어줬다. 위 소스의 10line을 보면
pagingVO에서 page 값을 get한다음
int 형으로 형변환 시킨 후 preparedStatement를 통해
page값을 쿼리에 넣어준다.
13line에서 부터는 DB에서 꺼내온
게시글 번호, 내용, 제목 등을
BoardDto에 넣은 후 PagingList에 add 후
PagingList를 반환한다.
이 반환된 PagingList를 커맨드에서
request.setAttribute를 통해 화면에 뿌려준것이다.
이제 커맨드에서 총 페이지 갯수를 가져올
준비를 해야한다. Map 형식의 pagingListCnt를 선언 후
boardDao안의 PagingListCnt를 통해
DB에서 totalPage를 뽑아와서 화면단으로 뿌려줘야한다.
다음 Map방식의 resMap객체를 만들어줘서
페이징에 필요한 여러 값들을 resMap안에 put 해준다.
일단 boardDao안의 PagingListCnt를 보자.
#{rows}는 아까 설명했으니 패스하자.
아까와 똑같이 10 값을 줬다.
이제 쿼리에서 뽑아온 totalPage 값을
pagingVO안에 set시켜주자
다음 PagingListCnt가 Map 형식 이므로
pagingListCnt.put("totalPage", totalPage);
put을 사용해 Map 방식으로 값을 넣어주자.
다음 PagingListCnt 를 return하여 반환시켜준다.
위에서 설명했던 것처럼 dao에서
반환받은 totalPage를 resMap에 담자.
이제 위처럼 resMap에 각종 페이징 로직값들을
put해준다음 PagingList와 resMap을
request.setAttribute를 사용해 화면에 뿌려주자
로직 설명은 아래 링크에 들어가서 확인하자
http://rwd337.tistory.com/83?category=650717
이제 페이징을 적용할 jsp 화면단에
아래와같이 값들을 출력 시켜주면된다.
화면단의 페이징 소스는 SPRING 페이징 소스를
그대로 가져왔다.
마지막으로 스크립트단에 아래처럼 fnGoPaging을 만들어주면 끝이다.
'JSP' 카테고리의 다른 글
톰캣 lib 실행 순서 (2) (0) | 2019.02.24 |
---|---|
톰캣 lib 실행 순서 (1) (0) | 2019.02.24 |
JSP Servlet 페이징 구현하기(1) JSP + Oracle (0) | 2018.11.10 |
POSTMAN을 이용해 REST API 와 URL 요청 TEST 해보기!! (0) | 2018.07.09 |
부트스트랩 템플릿 사용하기 (2) | 2018.03.14 |