게시판 글 목록 기능 구현하기

민주·2021년 2월 9일
[BbsDAO.java]
public ArrayList<Bbs> getList(int pageNumber){ 
   //bbsID가 ? 보다작고 삭제되지 않은글(bbsAvailable =1)을 bbsID로 내림차순하여 10개만가져온다.
    tring SQL = "SELECT * FROM BBS WHERE bbsID < ? AND bbsAvailable =1  
    ORDER BY bbsID DESC LIMIT 10";
    //Bbs클래스에서 나오는 객체를 보관할수 있는 리스트 생성
    ArrayList<Bbs> list = new ArrayList<Bbs>();
    try {
	PreparedStatement pstmt = conn.prepareStatement(SQL); 
	/*getNext():마지막작성된 글의 번호 +1 에서 page당 10개씩 들어가니까 
         뒷페이지로 넘어간 게시물들을 빼준다.
	 그 뺀 값을 ?에 넣어서 현재 페이지의 게시글만 보이게 한다.*/
	pstmt.setInt(1, getNext() - (pageNumber -1) * 10);
	rs= pstmt.executeQuery();
        //SELECT로 받아온 값이 있을때까지 Bbs에 ResultSet값 넣어주기
	while(rs.next()) { 
	    Bbs bbs = new Bbs(); //자바빈즈를 이용해 대응하는 값 넣어주기
	    bbs.setBbsID(rs.getInt(1));
	    bbs.setBbsTitle(rs.getString(2));
	    bbs.setUserID(rs.getString(3));
	    bbs.setBbsDate(rs.getString(4));
	    bbs.setBbsContent(rs.getString(5));
	    bbs.setBbsAvailable(rs.getInt(6));
	    list.add(bbs); //최종적으로 list에 bbs를 담기
	}
    }catch(Exception e) {
	e.printStackTrace();
    }
    return list; //bbs가 담긴 목록 반환	
    }
	
public boolean nextPage(int pageNumber) {
    String SQL = "SELECT * FROM BBS WHERE bbsID < ? AND bbsAvailable =1  
    ORDER BY bbsID DESC LIMIT 10";
    try {
	PreparedStatement pstmt = conn.prepareStatement(SQL);
	pstmt.setInt(1, getNext() - (pageNumber -1) * 10);
    	rs= pstmt.executeQuery();
    	while(rs.next()) { //다음것이 있다면 다음페이지로 넘어가게, 
	return true;
	}
    }catch(Exception e) {
	e.printStackTrace();
    }
    return false; 
}
	
- getList()
    - 게시판 글 목록을 구현하기 위해 함수를 만들어준다.
    - 매개변수를 pageNumber로 받아서 특정한 페이지에 따른 게시글 목록을 가져오게한다.
- nextPage()
    - 게시글이 10단위로 끊겼을때 10개 이하면 다음페이지가 존재하면 안되기 때문에 페이징처리를 해준다.
    - 다음페이지가 있다면 true반환
    - 게시글이 0이나 10 배수라면 bbsID <1이 되어 반환 되는 값이 없기 때문에 false처리가 된다.
[bbs.jsp]
int pageNumber = 1; //기본페이지			
if(request.getParameter("pageNumber")!=null){
pageNumber = Integer.parseInt(request.getParameter("pageNumber"));
}
- <body>위쪽에 넣어서 pageNumber를 받아온다.
[bbs.jsp]
<tbody>
    <%
    	BbsDAO bbsDAO = new BbsDAO(); //BbsDAO객체화
    	ArrayList<Bbs> list = bbsDAO.getList(pageNumber);//getList함수 호출
    	for(int i = 0; i < list.size(); i++){
    %>	
    	<tr>
    	    <td><%=list.get(i).getBbsID() %></td>
    	    <!-- 제목을 눌렀을때 view.jsp로 이동하면서 해당 bbsID를 파라메터로 보낸다. -->
    	    <td><a href="view.jsp?bbsID<%=list.get(i).getBbsID() %>">
            	    <%=list.get(i).getBbsTitle() %></a></td>
    	    <td><%=list.get(i).getUserID() %></td>
    	    <!-- bbsDate를 보기쉽게 substring함수 사용 -->
    	    <td><%=list.get(i).getBbsDate().substring(0,11) +
          	  list.get(i).getBbsDate().substring(11,13) +"시" 
   		  +list.get(i).getBbsDate().substring(14,16) + "분"%></td>
    	</tr>
    <% }%>
 </tbody>
</table>
<% if(pageNumber!=1){ %>
    <a href="bbs.jsp?pageNumber=<%=pageNumber-1%>" 
       class="btn btn-success btn-arraw-left">이전</a>
<!-- 다음페이지가 존재하는지 물어봐야하니까 +1-->
<%} if(bbsDAO.nextPage(pageNumber+1)){%> 
    <a href="bbs.jsp?pageNumber=<%=pageNumber+1%>" 
       class="btn btn-success btn-arraw-left">다음</a>
<%} %>
- BbsDAO를 객체화 시키고 getList()함수를 호출한다.
- getList()는 반환값이 list이기 때문에 list로 받아준다.
- 테이블에 리스트의 값을 넣어준다.
- 타이틀에 a태그는 해당 글 제목을 클릭했을 때 view.jsp로 가면서 bbsID를 파라메터로 보내주는 
  작업이다.
- 테이블 아래 쪽에는 pageNumber가 1이상이라면 페이지 이동이 가능한 a태그를 만들어준다.
- 이전페이지로 보내기 위해 같은 파일로 보내는데 파라메터로 pageNumber를 -1해서 보낸다.
- nextpPage() 함수는 다음페이지가 있으면 true반환 없으면 false반환
- 다음페이지가 있다면 같은파일로 보내는데 파라메터로 pageNumber에 +1해서 보낸다.
profile
개발이좋아요

0개의 댓글