본문 바로가기
JSP/JSP & Servlet

JSP 게시판 - 답글 쓰기

by avvin 2019. 5. 10.

JSP 게시판 - 답글 쓰기



BoardReWrite.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<body>
 
<div style="text_align: center">
    <h2>답변글 입력하기</h2>
    <%
        //게시글 읽기에서 답변글쓰기를 클릭하면 넘겨주는 데이터들을 받아줌
        int num = Integer.parseInt(request.getParameter("num"));
        int ref = Integer.parseInt(request.getParameter("ref"));
        int re_step = Integer.parseInt(request.getParameter("re_step"));
        int re_level = Integer.parseInt(request.getParameter("re_level"));
    %>
 
<form action="BoardReWriteProc.jsp" method="post">
<table width="600" border="1" boardcolort="gray" bgcolor="skyblue">
    <tr height="40">
        <td width="150" align="center">작성자</td>
        <td width="450">
        <input type="text" name="writer" size="60">
        </td>
    </tr>
    <tr height="40">
        <td width="150" align="center">제목</td>
        <td width="450">
        <input type="text" name="subject" value="[답변]"
            size="60"></td>
    </tr>
    <tr height="40">
        <td width="150" align="center">이메일</td>
        <td width="450">
        <input type="email" name="email" size="60">
        </td>
    </tr>
    <tr height="40">
        <td width="150" align="center">비밀번호</td>
        <td width="450">
        <input type="password" name="password"
            size="60"></td>
    </tr>
    <tr height="40">
        <td width="150" align="center">글내용</td>
        <td width="450">
        <textarea rows="10" cols="60" name="content"></textarea>
        </td>
    </tr>
    <!-- form에서 사용자로부터 입력받지 않고 데이터를 넘김 -->
    <tr>
        <td align="center" colspan="2"><input type="hidden" name="ref"
            value="<%=ref%>">
             <input type="hidden" name="re_step"
            value="<%=re_step%>"
            <input type="hidden" name="re_level"
            value="<%=re_level%>"
            <input type="submit" value="답글 등록">
            &nbsp; &nbsp; 
            <input type="reset" value="다시 입력"> <input
            type="button" onclick="location.href='BoardList.jsp'"
            value="전체글보기"></td>
    </tr>
</table>
</form>
</div>
</body>
</html>
cs


BoardReWriteProc.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<%@page import="model.BoardDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<body>
 
    <%
        request.setCharacterEncoding("UTF-8");
    %>
    <!-- 데이터 한번에 받아오기 : usebean -->
 
    <jsp:useBean id="boardbean" class="model.BoardBean">
        <jsp:setProperty name="boardbean" property="*" />
    </jsp:useBean>
 
    <%
        //데이터베이스 객체 생성
        BoardDAO bdao = new BoardDAO();
        bdao.reWriteBoard(boardbean);
        //답변 데이터를 모두 저장 후 전페 게시글 보기를 설정
        response.sendRedirect("BoardList.jsp");
    %>
 
</body>
</html>
cs



BoardDAO.java 일부  [ reWriteBoard() ] 메서드 정의부

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
 
    // 답변글이 저장되는 메서드
    public BoardBean reWriteBoard(BoardBean bean) {
 
        // 부모글 그룹, 글레벨 글스텝 읽어들이기
        int ref = bean.getRef();
        int re_step = bean.getRe_step();
        int re_level = bean.getRe_level();
 
        getCon();
        try {
            // ★핵심코드
            //답변형 게시판의 특징
            //글을 그룹으로 만들어야하기때문에 re_step과 re_level을 먼저 수정해줘야한다.
            // 부모 글보다 큰 re_level값을 전부 1씩 증가시켜줌
            String levelsql = "update board set re_level = re_level+1 where ref=? and re_level> ?";
            pstmt = con.prepareCall(levelsql);
            pstmt.setInt(1, ref);
            pstmt.setInt(2, re_level);
            pstmt.executeUpdate();
            //답변 글 데이터를 저장
            
            String sql ="insert into board values(board_seq.NEXTVAL, ?,?,?,?,sysdate,?,?,?,0,?)";
            pstmt = con.prepareStatement(sql);
            // ?에 값을 맵핑
            pstmt.setString(1, bean.getWriter());
            pstmt.setString(2, bean.getEmail());
            pstmt.setString(3, bean.getSubject());
            pstmt.setString(4, bean.getPassword());
            pstmt.setInt(5, ref); //부모의 ref 값을 넣어줌
            pstmt.setInt(6, re_step+1); //답글이니까 부모 글 re_setep에 1을 더해줌
            pstmt.setInt(7, re_level); //답글이니까 부모글 re_level에 1을 더해줌
            pstmt.setString(8, bean.getContent());
            // 쿼리 실행
            // 쿼리 실행 후 결과 리턴은 executeQuery(),
            // 데이터 업데이트는 executeUpdate()
            pstmt.executeUpdate();
            // 자원 반납
            con.close();
 
        } catch (Exception e) {
            e.printStackTrace();
        }
 
        return bean;
    }
cs



BoardList.jsp  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<%@page import="model.BoardBean"%>
<%@page import="java.util.Vector"%>
<%@page import="model.BoardDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<body>
 
    <%
        //전체 게시글의 숫자, 제목을 jsp쪽으로 가져와야함
        BoardDAO bdao = new BoardDAO();
        //전체게시글을 리턴 받아주는 소스
        //(bean이라는 세트 여러개를 한꺼번에 받아오려면 리스트(벡터) 써야한다.)
        Vector<BoardBean> vec = bdao.getAllBoard();
        //받아온 데이터를 화면에 출력
    %>
<div style="text-align: center">
<h2>전체 게시글 보기</h2>
<table align="center" width="700" border="1" bgcolor=skyblue>
    <tr height="40">
        <td width="50" align="center">번호</td>
        <td width="320" align="center">제목</td>
        <td width="100" align="center">작성자</td>
        <td width="150" align="center">작성일</td>
        <td width="80" align="center">조회수</td>
    </tr>
    <%
        //데이터 출력
        for (int i = 0; i < vec.size(); i++) {
            //벡터에 저장돼있는 빈클래스를 하나씩 추출
 
            BoardBean bean = vec.get(i);
 
            //글번호는 글스텝에 관계없이 부여되는 것이 보기좋으므로 i+1로 출력??
            //글제목에는 태그를 걸어준다.
    %>
    <tr height="40">
        <td width="50" align="center"><%=+ 1%></td>
        <td width="320" align="left"><a
            href="BoardInfo.jsp?num=<%=bean.getNum()%>"> &nbsp; 
            
            <%
            if (bean.getRe_step() > 1) {
                    for (int j = 0; j < (bean.getRe_step() - 1* 5; j++) {//5칸씩 띄어쓰기
                %> 
                &nbsp; 
                <%
                    }
                }
            %> <%=bean.getSubject()%></a></td>
        <td width="100" align="center"><%=bean.getWriter()%></td>
        <td width="150" align="center"><%=bean.getReg_date()%></td>
        <td width="80" align="center"><%=bean.getReadcount()%></td>
    </tr>
    <%
        }
    %>
    <tr height="40">
        <td align="center" colspan="5"><input type="button" value="글쓰기"
            onclick="location.href='BoardWriteForm.jsp'"></td>
    </tr>
</table>
</div>
</body>
</html>
cs



링크를 걸어준 칸에 style="text-decoration:none"> &nbsp; 추가하면 밑줄 사라진다.








(정리/수정 필요)

답글쓰기 폼 페이지


답글쓰기 처리 페이지


DAO에 답글저장 메서드


게시글 보기



폼페이지에서 처리페이지로 넘기고

데이터를 입력받아서 DAO클래스 메서드로 저장


처리페이지 있는과정과 없는 과정의 차이 파악하기


게시글쓰기(답게시글X) 폼에서는 re_step / re_lever 이 무조건 1 (게시글은 가상 상위글이고 보여지는 것도 가장 위)



 ajax