JAVA 교육/myWeb
2019/09/10 3. 페이징
조별하
2019. 11. 22. 22:46
페이징
▶글이 많이 쌓이게 되면 페이지가 길어지기 때문에 페이지를 만들어 주어야 한다.
구글 : 페이지가 7개가 넘어가면 앞부분의 페이지 버튼이 사라지고, 뒷부분의 페이지 버튼이 출력
네이버 : 페이지가 10개 단위로 넘어가며 10개가 넘어가야 그 다음 페이지가 화면에 출력
▶어떤 형태의 페이지를 선택할 지는 가장 대중적으로 사용하는것을 쓰면 된다
페이징 준비단계
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 에 현재페이지를 설정
▶현재 페이지가 없을 경우에는 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 소스를 이용해서 마음에 드는 페이지를 불러왔다
★ 페이징 class 분석 <과제>