위로 아래

DAO 메소드 수정

답글 기능을 위해서는 DAO에서 데이터베이스를 받아오는 BoardWrite 메소드도 수정되어야 한다.

 

기존 문장은 다음과 같았다.

sql = "INSERT INTO board "
    + "(bno, bref, bstep, blevel, "
    + "subject, content, writer, regdate, "
    + "ip, passwd, readcount) "
    + "VALUES(?,?,?,?,?,?,?,SYSDATE(),?,?,?)";
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, newBno);
pstmt.setInt(2, newBno);
pstmt.setInt(3, dto.getBstep());
pstmt.setInt(4, dto.getBlevel());
pstmt.setString(5, dto.getSubject());
pstmt.setString(6, dto.getContent());
pstmt.setString(7, dto.getWriter());
pstmt.setString(8, dto.getIp());
pstmt.setString(9, dto.getPasswd());
pstmt.setInt(10, dto.getReadcount());

 

bno 정보가 이미 있는 답글인 경우,

Bstep과 Blevel을 기존 것에서 1 더한 값으로 넣어준다.

sql = "INSERT INTO board "
    + "(bno, bref, bstep, blevel, "
    + "subject, content, writer, regdate, "
    + "ip, passwd, readcount) "
    + "VALUES(?,?,?,?,?,?,?,SYSDATE(),?,?,?)";
pstmt = conn.prepareStatement(sql);

pstmt.setInt(1, newBno);

if(dto.getBno()!=0) {
    pstmt.setInt(2, dto.getBref());
    dto.setBstep(dto.getBstep()+1);
    dto.setBlevel(dto.getBlevel()+1);
} else {
    pstmt.setInt(2, newBno);
}

pstmt.setInt(3, dto.getBstep());
pstmt.setInt(4, dto.getBlevel());
pstmt.setString(5, dto.getSubject());
pstmt.setString(6, dto.getContent());
pstmt.setString(7, dto.getWriter());
pstmt.setString(8, dto.getIp());
pstmt.setString(9, dto.getPasswd());
pstmt.setInt(10, dto.getReadcount());

새 글의 경우 bstep과 blevel 값은 따로 주어지지 않아, 데이터베이스의 컬럼 디폴트 값인 0으로 들어간다.

Bstep과 Blevel 값에 따라서 답글인지 새글인지 구분이 가능하다.

 

 

글쓰기를 실행하면 원래 subject, writer, content, passwd 파라미터만 전송했었다.

이제 새글인지 답글인지 확인할 지표가 필요하니,

bno가 null이 아니라면 답글로 보고, bno, bref, bstep, blevel도 가져오는 코드를 삽입한다.

if(request.getParameter("bno")!="0" && request.getParameter("bno").length()!=0
        || request.getParameter("bno")!=null && request.getParameter("bno").length()!=0){
    dto.setBno(Integer.parseInt(request.getParameter("bno")));
    dto.setBref(Integer.parseInt(request.getParameter("bref")));
    dto.setBstep(Integer.parseInt(request.getParameter("bstep")));
    dto.setBlevel(Integer.parseInt(request.getParameter("blevel")));
}

 

 

 

 

글 목록 페이지에서 답글 들여쓰기

글 목록 페이지에서 답글인 글들에는 앞에 'ㄴ'을 붙여서 답글인지 표시한다.

글 목록 페이지 table 중에서 제목 부분을 수정해야 한다.

blevel이 0이면 새글로 분류, 0보다 크면 답글로 분류한다.

답글일 때에는 제목 앞에 'ㄴ'을 붙인다.

<td>
    <c:choose>
        <c:when test="${x.blevel==0}">
		//새글 일 때
        </c:when>
        <c:when test="${x.blevel>0}">
        	//답글 일 때
            <span>ㄴ</span>
        </c:when>
    </c:choose>
    <a href="jb?command=content&bno=${x.bno}">${x.subject}</a>
</td>

 

 

 

결과

제대로 나오는 것을 확인할 수 있다.

 

 

 

 


전체 코드

더보기
//BoardDAO
package bean;
import java.sql.*;
import java.util.*;

public class BoardDAO {
	private static BoardDAO dao = null;
	
	private BoardDAO () {};
	
	public static BoardDAO getInstance(){
		if(dao==null)
			dao = new BoardDAO();
		return dao;
	}
	
	public int BoardWrite (BoardDTO dto) {
		Connection conn=null;
		PreparedStatement pstmt=null;
		ResultSet rs=null;
		int r = 0;
		conn = DBConnectionManager.getInstance().getConnection();
		
		try {
			
			int newBno = 0;
			String sql = "SELECT IFNULL(MAX(bno),0)+1 AS bno FROM board";
			pstmt = conn.prepareStatement(sql);
			rs = pstmt.executeQuery();
			if(rs.next())
				newBno = rs.getInt("bno");
			
			pstmt.close();
			rs.close();
			
			
			sql = "INSERT INTO board "
					+ "(bno, bref, bstep, blevel, "
					+ "subject, content, writer, regdate, "
					+ "ip, passwd, readcount) "
					+ "VALUES(?,?,?,?,?,?,?,SYSDATE(),?,?,?)";
			pstmt = conn.prepareStatement(sql);
			
			pstmt.setInt(1, newBno);
			
			if(dto.getBno()!=0) {
				pstmt.setInt(2, dto.getBref());
				dto.setBstep(dto.getBstep()+1);
				dto.setBlevel(dto.getBlevel()+1);
			} else {
				pstmt.setInt(2, newBno);
			}
			
			pstmt.setInt(3, dto.getBstep());
			pstmt.setInt(4, dto.getBlevel());
			pstmt.setString(5, dto.getSubject());
			pstmt.setString(6, dto.getContent());
			pstmt.setString(7, dto.getWriter());
			pstmt.setString(8, dto.getIp());
			pstmt.setString(9, dto.getPasswd());
			pstmt.setInt(10, dto.getReadcount());
			
			r = pstmt.executeUpdate();
			
		} catch(SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if(conn!=null) conn.close();
				if(pstmt!=null) pstmt.close();
				if(rs!=null) rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return r;
		
	}
}
<!-- BoardList.jsp -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri = "http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri = "http://java.sun.com/jsp/jstl/functions" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>글 목록</title>
<link rel="stylesheet" type="text/css" href="css/List.css">
</head>
<body>
<div id="button">
	<button type="button" onclick="location.href='jb?command=writeForm'">글쓰기</button>
</div>
<div class="clear"></div>
<table>
	<tr>
		<td colspan="6"> <h3>게시판 (전체 글 개수 : <c:out value="${total}"/>)</h3></td>
	</tr>
	<tr>
		<th>순서</th>
		<th>제목</th>
		<th>작성자</th>
		<th>조회수</th>
		<th>작성일</th>
		<th>IP</th>
	</tr>
	<c:choose>
		<c:when test = "${fn:length(articles)==0 }">
			<tr>
				<td colspan="6">게시글이 없습니다.</td>
			</tr>
		</c:when>
		<c:when test = "${fn:length(articles)>0 }">
			<c:forEach var="x" items="${articles}">
				<tr>
					<td>${x.bno}</td>
					<td>
						<c:choose>
							<c:when test="${x.blevel==0}">
								
							</c:when>
							<c:when test="${x.blevel>0}">
								<span>ㄴ</span>
							</c:when>
						</c:choose>
						<a href="jb?command=content&bno=${x.bno}">${x.subject}</a>
					</td>
					<td>${x.writer}</td>
					<td>${x.readcount}</td>
					<td>${x.regdate}</td>
					<td>${x.ip}</td>
				<tr>
			</c:forEach>
		</c:when>
	</c:choose>
</table>
</body>
</html>
<!-- BoardWriteAction.jsp -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import = "java.sql.*" %>
<%@ page import = "bean.BoardDTO" %>
<%@ page import = "bean.BoardDAO" %>

<%
	String subject = request.getParameter("subject");
	String writer = request.getParameter("writer");
	String content = request.getParameter("content");
	String passwd = request.getParameter("passwd");

	BoardDTO dto = new BoardDTO();
	
	if(request.getParameter("bno")!="0" && request.getParameter("bno").length()!=0
			|| request.getParameter("bno")!=null && request.getParameter("bno").length()!=0){
		dto.setBno(Integer.parseInt(request.getParameter("bno")));
		dto.setBref(Integer.parseInt(request.getParameter("bref")));
		dto.setBstep(Integer.parseInt(request.getParameter("bstep")));
		dto.setBlevel(Integer.parseInt(request.getParameter("blevel")));
	}

	
	dto.setSubject(subject);
	dto.setWriter(writer);
	dto.setContent(content);
	dto.setPasswd(passwd);
	dto.setIp(request.getRemoteAddr());
	
	BoardDAO dao = BoardDAO.getInstance();
	dao.BoardWrite(dto);
	
	response.sendRedirect("jb?command=list");
	
	
%>