JAVA 교육/myWeb

2019/09/10 3. 페이징

조별하 2019. 11. 22. 22:46

페이징

image

▶글이 많이 쌓이게 되면 페이지가 길어지기 때문에 페이지를 만들어 주어야 한다.



구글 : 페이지가 7개가 넘어가면 앞부분의 페이지 버튼이 사라지고, 뒷부분의 페이지 버튼이 출력
image

네이버 : 페이지가 10개 단위로 넘어가며 10개가 넘어가야 그 다음 페이지가 화면에 출력
image

▶어떤 형태의 페이지를 선택할 지는 가장 대중적으로 사용하는것을 쓰면 된다



페이징 준비단계

1) 한페이지당 출력할 글의 줄수

    <table class="table table-bordered">
      <tr>   
        <th style="width:300px">제목</th>
        <th style="width:100px">작성자</th>
        <th style="width:80px">조회수</th>
        <th style="width:150px">작성일</th>
    </tr>
<%

int recordPerPage=5;

▶테이블의 칼럼창 밑에 한페이지당 출력할 줄 수의 변수를 할당 해 주었다.



2) ssi.jsp 에 현재페이지를 설정

image

▶현재 페이지가 없을 경우에는 1페이지

3) 현재페이지 값과, 보여줄 페이지 값 매개변수로 설정

ArrayList<BbsDTO> list= dao.list(col,word, nowPage, recordPerPage);
    if(list==null){
        out.println("<tr>");
        out.println(" <td colspan='5'><strong>관련자료없음!!</strong></td>");
        out.println("</tr>");
    }else{

▶ 전에 list 메소드를 3개를 만든다고 언급하였다, 이제 마지막으로 만드는 list 메소드 이다.

4) 페이징 list 소스

 public ArrayList<BbsDTO> list(String col, String word, int nowPage, int recordPerPage){
            ArrayList<BbsDTO> list=null;

            // 페이지당 출력할 레코드 갯수 (10개를 기준)
            // 1 page : WHERE r>=1 AND r<=10
            // 2 page : WHERE r>=11 AND r<=20
            // 3 page : WHERE r>=21 AND r<=30
            int startRow = ((nowPage-1) * recordPerPage) + 1 ;
            int endRow   = nowPage * recordPerPage;

            try{
                Connection con=DBOpen.getConnection();
                StringBuilder sql=new StringBuilder();

              word = word.trim(); //검색어의 좌우 공백 제거

              if(word.length()==0) { //검색을 하지 않는 경우
                sql.append(" SELECT bbsno,subject,wname,readcnt,indent,regdt, r");
                sql.append(" FROM( SELECT bbsno,subject,wname,readcnt,indent,regdt, rownum as r");
                sql.append("       FROM ( SELECT bbsno,subject,wname,readcnt,indent,regdt");
                sql.append("              FROM tb_bbs");
                sql.append("              ORDER BY grpno DESC, ansnum ASC");
                sql.append("           )");
                sql.append("     )");
                sql.append(" WHERE r>=" + startRow + " AND r<=" + endRow) ;
              } else {
                //검색을 하는 경우
                sql.append(" SELECT bbsno,subject,wname,readcnt,indent,regdt, r");
                sql.append(" FROM( SELECT bbsno,subject,wname,readcnt,indent,regdt, rownum as r");
                sql.append("       FROM ( SELECT bbsno,subject,wname,readcnt,indent,regdt");
                sql.append("              FROM tb_bbs");

                String search="";
                if(col.equals("wname")) {
                  search += " WHERE wname LIKE '%" + word + "%'";
                } else if(col.equals("subject")) {
                  search += " WHERE subject LIKE '%" + word + "%'";
                } else if(col.equals("content")) {
                  search += " WHERE content LIKE '%" + word + "%'";
                } else if(col.equals("subject_content")) {
                  search += " WHERE subject LIKE '%" + word + "%'";
                  search += " OR content LIKE '%" + word + "%'";
                }

                sql.append(search);        

                sql.append("              ORDER BY grpno DESC, ansnum ASC");
                sql.append("           )");
                sql.append("     )");
                sql.append(" WHERE r>=" + startRow + " AND r<=" + endRow) ;
              }//if end

              PreparedStatement pstmt=con.prepareStatement(sql.toString());
              ResultSet rs=pstmt.executeQuery();
              if(rs.next()){
                list=new ArrayList<>();
                do{
                  BbsDTO dto=new BbsDTO();
                  dto.setBbsno(rs.getInt("bbsno"));
                  dto.setSubject(rs.getString("subject"));
                  dto.setWname(rs.getString("wname"));
                  dto.setReadcnt(rs.getInt("readcnt"));
                  dto.setRegdt(rs.getString("regdt"));
                  dto.setIndent(rs.getInt("indent"));
                  list.add(dto);
                }while(rs.next());
              }//if end

            }catch(Exception e) {
              System.out.println("목록 페이징 실패: "+e);
            }   
            return list;
          }//list() end  

5) 글개수 밑에부분에 페이지 리스트를 만들자

        <!-- 페이지 리스트 시작 -->
        <tr>
            <td colspan="4">
<%
            String paging= new Paging().paging2(count, nowPage, recordPerPage, col, word, "bbsList.jsp");
            out.print(paging);
%>
            </td>
        <tr>    
        <!-- 페이지 리스트 끝  -->

▶ paging 소스를 이용해서 마음에 드는 페이지를 불러왔다

image

★ 페이징 class 분석 <과제>