티스토리 뷰

오늘은 페이지 넘김을 할겁니다..

우선 페이지 넘기기를 하기 위해서 글을 열심히 등록합니다..

등록을 하고 보니.. 번호가 뒤죽박죽입니다!..



newboard_list.jsp 에서..

   query.append("SELECT SEQ, NAME, SUBJECT, CONTENTS, REG_DATE, RNUM \n")
     .append("FROM ( \n")
     .append(" SELECT SEQ, NAME, SUBJECT, CONTENTS, REG_DATE, ROWNUM RNUM \n")
     .append(" FROM ( \n")
     .append("  SELECT SEQ, NAME, SUBJECT, CONTENTS, TO_CHAR(REG_DATE, 'YYYY-MM-DD') REG_DATE \n")
     .append("  FROM NEWBOARD \n")
     .append("  WHERE SEQ IS NOT NULL \n");
   query.append(where);
   query.append("  ORDER BY REG_DATE DESC \n")
     .append(" ) ) \n")
리스트를 출력해주는 쿼리 중 가장 아래 정렬 부분을.. 글 번호로 바꿔줍니다..

   query.append("  ORDER BY SEQ DESC \n") 으로 말이죠..

그럼 제대로 나오겠죠?..



그리고 페이지를 넘기는 조건이  int page_no = 20; 로 한페이지에 글이 20개 있을때 넘기기로 했는데..


20개가 한페이지니까.. 대략 100개를 써야 5페이지이기 때문에;.. page_no 를 1개 또는 2개로 임시 변경을 해줍니다..

저는 int page_no = 1; 으로 바꿨습니다..

뭐 지금 바꿔도 페이지 관련 소스는 하나도 넣지 않았기에.. 그대로 나올겁니다;..

이제부터 소스를 넣어보도록 하죠..

기존 게시판만들기에 있던 소스는.. 보기에도 복잡하죠..
<%
 if( ( total_cnt % list_num ) == 0 )
  t_page = total_cnt / list_num;
 else
  t_page = ( total_cnt / list_num ) + 1;

 int block_num = 100;
 int t_block = t_page / block_num;

 if( t_page % block_num != 0 )
  t_block++;
 
 int c_block = c_page / block_num;
 
 if( c_page % block_num != 0 )
  c_block++;
%>
<%
 for( int i=(c_block-1)*block_num+1; i<=c_block*block_num && i<=t_page; i++ )
 {
%>
 <a href="board_list.jsp?str_c_page=<%=i%>">
<%
 if( c_page == i )
  out.print( "<b>" );
%>
 [<%=i%>]
<%
 if( c_page == i )
  out.print( "</b>" );
%>

그리고 소스가 완전한게 아니라.. 딱 5페이지만 출력됩니다;..
그래서 이걸 수정하고자.. 이번에 게시판만들기3를 하게되었죠;.. 이게 핵심인것이죠;..

지난 글에.. WEB-INF 이야기를 했습니다.. 그 이야기를 꺼낸 이유가 여기있는것이죠;..

java 파일을 또 하나 만듭니다.. 이클립스 유저들은 편하겠군요..

OKJSP 에서 배운 방법인데.. 찾아보니까 없어졌더군요..

페이지 관련해서 넣을꺼니까 간단하게.. Page.java 라고 만들겠습니다..


뭔가 많이 복잡해 보이기는 하는데.. 이걸 한번만 class로 만들어 두시면.. 나중에 편해집니다..

아까 위에 리스트 출력해줬던 쿼리에.. 아래 줄 하나를 추가합니다..
   query.append("SELECT SEQ, NAME, SUBJECT, CONTENTS, REG_DATE, RNUM \n")
     .append("FROM ( \n")
     .append(" SELECT SEQ, NAME, SUBJECT, CONTENTS, REG_DATE, ROWNUM RNUM \n")
     .append(" FROM ( \n")
     .append("  SELECT SEQ, NAME, SUBJECT, CONTENTS, TO_CHAR(REG_DATE, 'YYYY-MM-DD') REG_DATE \n")
     .append("  FROM NEWBOARD \n")
     .append("  WHERE SEQ IS NOT NULL \n");
   query.append(where);
   query.append("  ORDER BY SEQ DESC \n")
     .append(" ) ) \n")
     .append("WHERE RNUM BETWEEN "+Page.pagingStatus(totalCount, page_no, page_num, "f_article")+" AND "+Page.pagingStatus(totalCount, page_no, page_num, "e_article")+" \n");
 
그리고 출력하면..
java.lang.NullPointerException 이 나와요;..

어디서 null 값이 나오나 찾아봤더니.. page_num 에서 null 이 나오더군요.. 아직 넘겨준 값이 없으니 당연히 null 일수밖에요..
그래서.. Page.java 에 null 값을 빈칸으로 바꿔주는 것도 넣었던겁니다.. 이럴때 써먹을라고..

사실.. 만들어놓고 안되서;.. 새로 넣은겁니다;..

String page_num = request.getParameter("page_num"); 를 아래와 같이 바꿔줍니다..
String page_num = Page.nullToBlank(request.getParameter("page_num"));

그리고 다시 출력하니.. page_no 숫자 처럼 1개만 출력되었습니다..



이제 [1][2] 등을 넣고 페이지 넘김을 해보죠..

 이미지를 넣어봤습니다 <, > 는 너무 촌스러워보여서..

newboard_list 부분 중 가장 아래를 바꿔봤습니다..


<%
 } catch( Exception e ) {
  out.println( e.toString() );
 }
%>

<table width="100%" border="0" cellpadding="0" cellspacing="0">
 <tr><td height="40" align="center"><%=Page.paging(totalCount, page_no, page_num, request.getRequestURI(), link) %></td></tr>
</table>

<table width="100%" cellpadding="0" cellspacing="0" border="0">
 <tr><td colspan="4" height="5"></td></tr>
 <tr align="center">
  <td><a href="/newboard/newboard_add.jsp"><img src="이미지주소" border="0" alt="등록"></a></td>
 </tr>
</table>

그리고 다시 리스트 페이지 출력!.. 아래에 [1][2][3][4][5] 와 함께 next, prev 가 나왔네요..



페이지 한번 넘겨보고..



끝까지도 한번 넘겨봤습니다..



제대로 나오네요..

지금 게시판 소스를 보시면 글 번호는 SEQ를 그대로 찍고 있습니다.. 만일.. 2번 글을 삭제했다고 하면..

1, 3, 4, 5, 6 이런식으로 출력이 되겠죠..
그걸 방지하기 위해서 RNUM 을 넣었던겁니다.. 물론 페이지 넘겼을때도 썼지만요;..

이제 글 번호를 다른걸로 바꿔봅시다..

다시 newboard_list 에서 중간에 이 부분을 추가해줍니다..

   rs = stmt.executeQuery(query.toString());

   if (page_num.equals("")) page_num = "1";
   int pageNo = Page.strToInt(page_num, 1);
   int tno = Page.strToInt(totalCount, 1);
   int no = (tno-(pageNo-1)*page_no);

   for (int i = 0; rs.next(); i++) {

또  <td><%=rs.getString("SEQ") %></td> 이부분을 <td><%=no-- %></td> 이렇게 바꿔줍니다..

그리고 출력!.. 변한건 없습니다.. 대신 중간에 글이 삭제 되었을때.. 그 글 번호를 빼고 다시 카운트하게되죠..
보기 편하게 글 5개씩 보이도록 설정했습니다..


다음 시간에는 글 검색, 글 내용 보기, 삭제 수정 등을 해보겠습니다..

오늘의 소스입니다..



저작권 표시 꼭!.. 상업적 이용 절대 불가!.. 컨텐츠 변경 안됨!..