1. 개요
■ 지난 포스팅 : [JSP개발] 게시판 - 댓글 삭제
댓글을 수정하는 기능을 구현할 것이다. 댓글 수정의 경우 화면은 댓글 답변을 작성하는 화면과 동일하다.
■ JSP
BoardDetailForm.jsp : 상세보기 화면에는 댓글 수정과 관련된 코드를 추가한다.
CommentUpdateForm.jsp : 댓글 수정 화면이다.
■ Java
CommentUpdateFormAction.java : 수정 화면을 띄우는 Action이다.
CommentUpdateAction.java : 댓글 수정 Action이다.
CommentDAO.java : DAO에는 댓글 수정을 하는 메서드를 추가한다.
2. 소스 코드
■ BoardDetailForm.jsp
[수정] 클릭 시 cmUpdateOpen( )을 호출하도록 한다. 호출 시 댓글의 글 번호를 전달한다.
스크립트에는 수정창을 여는 함수를 추가한다. 답글 창과 동일한 형식이다.
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 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 | <%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <html> <head> <title>글 상세보기</title> <style type="text/css"> #wrap { width: 800px; margin: 0 auto 0 auto; } #detailBoard{ text-align :center; } #title{ height : 16; font-family :'돋움'; font-size : 12; text-align :center; background-color: #F7F7F7; } #btn{ font-family :'돋움'; font-size : 14; text-align :center; } </style> <script type="text/javascript"> function changeView(value) { if(value == 0) location.href='BoardListAction.bo?page=${pageNum}'; else if(value == 1) location.href='BoardReplyFormAction.bo?num=${board.board_num}&page=${pageNum}'; } function doAction(value) { if(value == 0) // 수정 location.href="BoardUpdateFormAction.bo?num=${board.board_num}&page=${pageNum}"; else if(value == 1) // 삭제 location.href="BoardDeleteAction.bo?num=${board.board_num}"; } var httpRequest = null; // httpRequest 객체 생성 function getXMLHttpRequest(){ var httpRequest = null; if(window.ActiveXObject){ try{ httpRequest = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) { try{ httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e2) { httpRequest = null; } } } else if(window.XMLHttpRequest){ httpRequest = new window.XMLHttpRequest(); } return httpRequest; } // 댓글 등록 function writeCmt() { var form = document.getElementById("writeCommentForm"); var board = form.comment_board.value var id = form.comment_id.value var content = form.comment_content.value; if(!content) { alert("내용을 입력하세요."); return false; } else { var param="comment_board="+board+"&comment_id="+id+"&comment_content="+content; httpRequest = getXMLHttpRequest(); httpRequest.onreadystatechange = checkFunc; httpRequest.open("POST", "CommentWriteAction.co", true); httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;charset=EUC-KR'); httpRequest.send(param); } } function checkFunc(){ if(httpRequest.readyState == 4){ // 결과값을 가져온다. var resultText = httpRequest.responseText; if(resultText == 1){ document.location.reload(); // 상세보기 창 새로고침 } } } // 댓글 답변창 function cmReplyOpen(comment_num){ var userId = '${sessionScope.sessionID}'; if(userId == "" || userId == null){ alert("로그인후 사용가능합니다."); return false; } else{ // 댓글 답변창 open window.name = "parentForm"; window.open("CommentReplyFormAction.co?num="+comment_num, "replyForm", "width=570, height=350, resizable = no, scrollbars = no"); } } // 댓글 삭제창 function cmDeleteOpen(comment_num){ var msg = confirm("댓글을 삭제합니다."); if(msg == true){ // 확인을 누를경우 deleteCmt(comment_num); } else{ return false; // 삭제취소 } } // 댓글 삭제 function deleteCmt(comment_num) { var param="comment_num="+comment_num; httpRequest = getXMLHttpRequest(); httpRequest.onreadystatechange = checkFunc; httpRequest.open("POST", "CommentDeleteAction.co", true); httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;charset=EUC-KR'); httpRequest.send(param); } // 댓글 수정창 function cmUpdateOpen(comment_num){ window.name = "parentForm"; window.open("CommentUpdateFormAction.co?num="+comment_num, "updateForm", "width=570, height=350, resizable = no, scrollbars = no"); } </script> </head> <body> <div id="wrap"> <br><br> <div id="board"> <table id="detailBoard" width="800" border="3" bordercolor="lightgray"> <tr> <td id="title">작성일</td> <td>${board.board_date}</td> </tr> <tr> <td id="title">작성자</td> <td>${board.board_id}</td> </tr> <tr> <td id="title"> 제 목 </td> <td> ${board.board_subject} </td> </tr> <tr> <td id="title"> 내 용 </td> <td> ${board.board_content} </td> </tr> <tr> <td id="title"> 첨부파일 </td> <td> <a href='FileDownloadAction.bo?file_name=${board.board_file}'>${board.board_file}</a> </td> </tr> <tr align="center" valign="middle"> <td colspan="5"> <c:if test="${sessionScope.sessionID !=null}"> <c:if test="${sessionScope.sessionID == board.board_id}"> <input type="button" value="수정" onclick="doAction(0)"> <input type="button" value="삭제" onclick="doAction(1)"> </c:if> <input type="button" value="답글" onclick="changeView(1)" > </c:if> <input type="button" value="목록" onclick="changeView(0)"> </td> <!-- javascript:location.href='BoardListAction.bo?page=${pageNum}' --> </tr> </table> </div> <br><br> <!-- 댓글 부분 --> <div id="comment"> <table border="1" bordercolor="lightgray"> <!-- 댓글 목록 --> <c:if test="${requestScope.commentList != null}"> <c:forEach var="comment" items="${requestScope.commentList}"> <tr> <!-- 아이디, 작성날짜 --> <td width="150"> <div> <c:if test="${comment.comment_level > 1}"> <!-- 답변글일경우 아이디 앞에 공백을 준다. --> <img src="img/reply_icon.gif"> </c:if> ${comment.comment_id}<br> <font size="2" color="lightgray">${comment.comment_date}</font> </div> </td> <!-- 본문내용 --> <td width="550"> <div class="text_wrapper"> ${comment.comment_content} </div> </td> <!-- 버튼 --> <td width="100"> <div id="btn" style="text-align:center;"> <a href="#" onclick="cmReplyOpen(${comment.comment_num})">[답변]</a><br> <!-- 댓글 작성자만 수정, 삭제 가능하도록 --> <c:if test="${comment.comment_id == sessionScope.sessionID}"> <a href="#" onclick="cmUpdateOpen(${comment.comment_num})">[수정]</a><br> <a href="#" onclick="cmDeleteOpen(${comment.comment_num})">[삭제]</a> </c:if> </div> </td> </tr> </c:forEach> </c:if> <!-- 로그인 했을 경우만 댓글 작성가능 --> <c:if test="${sessionScope.sessionID !=null}"> <tr bgcolor="#F5F5F5"> <form id="writeCommentForm"> <input type="hidden" name="comment_board" value="${board.board_num}"> <input type="hidden" name="comment_id" value="${sessionScope.sessionID}"> <!-- 아이디--> <td width="150"> <div> ${sessionScope.sessionID} </div> </td> <!-- 본문 작성--> <td width="550"> <div> <textarea name="comment_content" rows="4" cols="70" ></textarea> </div> </td> <!-- 댓글 등록 버튼 --> <td width="100"> <div id="btn" style="text-align:center;"> <p><a href="#" onclick="writeCmt()">[댓글등록]</a></p> </div> </td> </form> </tr> </c:if> </table> </div> </div> </body> </html> | cs |
■ CommentUpdateFormAction.java
CommentUpdateFormAction은 수정할 댓글 정보를 가져오고 수정 화면을 지정하는 작업을 한다.
21줄 : 댓글 글 번호를 가져온다.
24줄 : 글 번호를 이용하여 댓글 정보를 가져온다.
27줄 : 댓글 정보를 request에 세팅한다.
30줄 : 다음 화면으로 수정 화면을 지정한다.
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 | package jsp.board.comment.action; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import jsp.board.comment.model.CommentBean; import jsp.board.comment.model.CommentDAO; import jsp.common.action.Action; import jsp.common.action.ActionForward; public class CommentUpdateFormAction implements Action { @Override public ActionForward execute(HttpServletRequest request, HttpServletResponse response) throws Exception { ActionForward forward = new ActionForward(); // 수정할 댓글의 글번호를 가져온다. int comment_num = Integer.parseInt(request.getParameter("num")); CommentDAO dao = CommentDAO.getInstance(); CommentBean comment = dao.getComment(comment_num); // 댓글 정보를 request에 세팅한다. request.setAttribute("comment", comment); forward.setRedirect(false); forward.setNextPath("board/comment/CommentUpdateForm.jsp"); return forward; } } | cs |
■ CommentUpdateForm.jsp
수정 화면의 html 코드이다. 수정 화면은 댓글 답변 화면과 동일하다. 차점은 96줄에 수정 화면이 Open될 시 기존의 댓글 내용을 화면에 보여주는 부분뿐이다.
스크립트의 checkValue( ) 함수는 내용 입력 여부를 검사하고, 내용이 입력되었다면, Ajax를 이용해 서버로 데이터를 전달한다. 수정 시 전달할 데이터는 댓글 글 번호와 수정한 내용이다.
그외 부분은 다른 포스팅에서 몇 번 언급한 Ajax와 동일하다.
서버로 정상적으로 데이터가 전달되고, 결과값을 받았다면 76~78줄이 실행된다. 먼저 상세 보기창 을 새로 고침 하고 이후 현재 수정 창을 닫는다.
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 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | <%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-KR"> <title> 댓글 답변 </title> <style type="text/css"> #wrap { width: 550px; margin: 0 auto 0 auto; text-align :center; } #commentUpdateForm{ text-align :center; } </style> <script type="text/javascript"> var httpRequest = null; // httpRequest 객체 생성 function getXMLHttpRequest(){ var httpRequest = null; if(window.ActiveXObject){ try{ httpRequest = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) { try{ httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e2) { httpRequest = null; } } } else if(window.XMLHttpRequest){ httpRequest = new window.XMLHttpRequest(); } return httpRequest; } function checkValue() { var form = document.forms[0]; // 전송할 값을 변수에 담는다. var comment_num = "${comment.comment_num}"; var comment_content = form.comment_content.value if(!comment_content) { alert("내용을 입력하세요"); return false; } else{ var param="comment_num="+comment_num+"&comment_content="+comment_content; httpRequest = getXMLHttpRequest(); httpRequest.onreadystatechange = checkFunc; httpRequest.open("POST", "CommentUpdateAction.co", true); httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;charset=EUC-KR'); httpRequest.send(param); } } function checkFunc(){ if(httpRequest.readyState == 4){ // 결과값을 가져온다. var resultText = httpRequest.responseText; if(resultText == 1){ if (opener != null) { // 부모창 새로고침 window.opener.document.location.reload(); opener.updateForm = null; self.close(); } } } } </script> </head> <body> <div id="wrap"> <br> <b><font size="5" color="gray">댓글수정</font></b> <hr size="1" width="550"> <br> <div id="commentUpdateForm"> <form name="updateInfo" target="parentForm"> <textarea rows="7" cols="70" name="comment_content">${comment.comment_content}</textarea> <br><br> <input type="button" value="등록" onclick="checkValue()"> <input type="button" value="창닫기" onclick="window.close()"> </form> </div> </div> </body> </html> | cs |
■ CommentUpdateAction.java
20~21줄 : 글 번호와 수정한 댓글 내용을 가져온다.
25~27줄 : 가져온 값들을 CommentBean에 세팅한다.
29줄 : 수정을 위해 DAO에 CommentBean을 전달한다.
35줄 : 수정이 정상적으로 되면 CommentUpdateForm으로 1을 전송한다.
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 | package jsp.board.comment.action; import java.io.PrintWriter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import jsp.board.comment.model.CommentBean; import jsp.board.comment.model.CommentDAO; import jsp.common.action.Action; import jsp.common.action.ActionForward; public class CommentUpdateAction implements Action { @Override public ActionForward execute(HttpServletRequest request, HttpServletResponse response) throws Exception { // 파라미터를 가져온다. int comment_num = Integer.parseInt(request.getParameter("comment_num")); String comment_content = request.getParameter("comment_content"); CommentDAO dao = CommentDAO.getInstance(); CommentBean comment = new CommentBean(); comment.setComment_num(comment_num); comment.setComment_content(comment_content); boolean result = dao.updateComment(comment); response.setContentType("text/html;charset=euc-kr"); PrintWriter out = response.getWriter(); // 정상적으로 댓글을 수정했을경우 1을 전달한다. if(result) out.println("1"); out.close(); return null; } } | cs |
■ CommentDAO.java
DAO에는 수정 메서드만 추가한다.
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 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 | package jsp.board.comment.model; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import jsp.common.util.DBConnection; import jsp.guestbook.model.GuestbookBean; public class CommentDAO { private Connection conn; private PreparedStatement pstmt; private ResultSet rs; private static CommentDAO instance; private CommentDAO(){} public static CommentDAO getInstance(){ if(instance==null) instance=new CommentDAO(); return instance; } // 시퀀스를 가져온다. public int getSeq() { int result = 1; try { conn = DBConnection.getConnection(); // 시퀀스 값을 가져온다. (DUAL : 시퀀스 값을 가져오기위한 임시 테이블) StringBuffer sql = new StringBuffer(); sql.append("SELECT COMMENT_SEQ.NEXTVAL FROM DUAL"); pstmt = conn.prepareStatement(sql.toString()); rs = pstmt.executeQuery(); // 쿼리 실행 if (rs.next()) result = rs.getInt(1); } catch (Exception e) { throw new RuntimeException(e.getMessage()); } close(); return result; } // end getSeq // 댓글 등록 public boolean insertComment(CommentBean comment) { boolean result = false; try { conn = DBConnection.getConnection(); // 자동 커밋을 false로 한다. conn.setAutoCommit(false); StringBuffer sql = new StringBuffer(); sql.append("INSERT INTO BOARD_COMMENT"); sql.append(" (COMMENT_NUM, COMMENT_BOARD, COMMENT_ID, COMMENT_DATE"); sql.append(" , COMMENT_PARENT, COMMENT_CONTENT)"); sql.append(" VALUES(?,?,?,sysdate,?,?)"); pstmt = conn.prepareStatement(sql.toString()); pstmt.setInt(1, comment.getComment_num()); pstmt.setInt(2, comment.getComment_board()); pstmt.setString(3, comment.getComment_id()); pstmt.setInt(4, comment.getComment_parent()); pstmt.setString(5, comment.getComment_content()); int flag = pstmt.executeUpdate(); if(flag > 0){ result = true; conn.commit(); // 완료시 커밋 } } catch (Exception e) { try { conn.rollback(); // 오류시 롤백 } catch (SQLException sqle) { sqle.printStackTrace(); } e.printStackTrace(); throw new RuntimeException(e.getMessage()); } close(); return result; } // end insertComment(); // 댓글 목록 가져오기 public ArrayList<CommentBean> getCommentList(int boardNum) { ArrayList<CommentBean> list = new ArrayList<CommentBean>(); try { conn = DBConnection.getConnection(); /* 댓글의 페이지 처리를 하고싶다면 이 쿼리를 사용하면 된다. * SELECT * FROM * (SELECT ROWNUM AS rnum, * data.* * FROM * (SELECT LEVEL, * COMMENT_NUM, * COMMENT_BOARD, * COMMENT_ID, * COMMENT_DATE, * COMMENT_PARENT, * COMMENT_CONTENT * FROM BOARD_COMMENT * WHERE COMMENT_BOARD = ? * START WITH COMMENT_PARENT = 0 * CONNECT BY PRIOR COMMENT_NUM = COMMENT_PARENT) * data) * WHERE rnum>=? and rnum<=? ; */ StringBuffer sql = new StringBuffer(); sql.append(" SELECT LEVEL, COMMENT_NUM, COMMENT_BOARD,"); sql.append(" COMMENT_ID, COMMENT_DATE,"); sql.append(" COMMENT_PARENT, COMMENT_CONTENT"); sql.append(" FROM BOARD_COMMENT"); sql.append(" WHERE COMMENT_BOARD = ?"); sql.append(" START WITH COMMENT_PARENT = 0"); sql.append(" CONNECT BY PRIOR COMMENT_NUM = COMMENT_PARENT"); pstmt = conn.prepareStatement(sql.toString()); pstmt.setInt(1, boardNum); rs = pstmt.executeQuery(); while(rs.next()) { CommentBean comment = new CommentBean(); comment.setComment_level(rs.getInt("LEVEL")); comment.setComment_num(rs.getInt("COMMENT_NUM")); comment.setComment_board(rs.getInt("COMMENT_BOARD")); comment.setComment_id(rs.getString("COMMENT_ID")); comment.setComment_date(rs.getDate("COMMENT_DATE")); comment.setComment_parent(rs.getInt("COMMENT_PARENT")); comment.setComment_content(rs.getString("COMMENT_CONTENT")); list.add(comment); } } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e.getMessage()); } close(); return list; } // end getCommentList // 댓글 1개의 정보를 가져온다. public CommentBean getComment(int comment_num) { CommentBean comment = null; try { conn = DBConnection.getConnection(); StringBuffer sql = new StringBuffer(); sql.append("SELECT * FROM BOARD_COMMENT WHERE COMMENT_NUM = ?"); pstmt = conn.prepareStatement(sql.toString()); pstmt.setInt(1, comment_num); rs = pstmt.executeQuery(); while(rs.next()) { comment = new CommentBean(); comment.setComment_num(rs.getInt("COMMENT_NUM")); comment.setComment_board(rs.getInt("COMMENT_BOARD")); comment.setComment_id(rs.getString("COMMENT_ID")); comment.setComment_date(rs.getDate("COMMENT_DATE")); comment.setComment_parent(rs.getInt("COMMENT_PARENT")); comment.setComment_content(rs.getString("COMMENT_CONTENT")); } } catch (Exception e) { throw new RuntimeException(e.getMessage()); } close(); return comment; } // end getComment // 댓글 삭제 public boolean deleteComment(int comment_num) { boolean result = false; try { conn = DBConnection.getConnection(); conn.setAutoCommit(false); // 자동 커밋을 false로 한다. StringBuffer sql = new StringBuffer(); sql.append("DELETE FROM BOARD_COMMENT"); sql.append(" WHERE COMMENT_NUM IN"); sql.append(" (SELECT COMMENT_NUM"); sql.append(" FROM BOARD_COMMENT"); sql.append(" START WITH COMMENT_NUM = ?"); sql.append(" CONNECT BY PRIOR COMMENT_NUM = COMMENT_PARENT) "); pstmt = conn.prepareStatement(sql.toString()); pstmt.setInt(1, comment_num); int flag = pstmt.executeUpdate(); if(flag > 0){ result = true; conn.commit(); // 완료시 커밋 } } catch (Exception e) { try { conn.rollback(); // 오류시 롤백 } catch (SQLException sqle) { sqle.printStackTrace(); } throw new RuntimeException(e.getMessage()); } close(); return result; } // end deleteComment // 댓글 수정 public boolean updateComment(CommentBean comment) { boolean result = false; try{ conn = DBConnection.getConnection(); conn.setAutoCommit(false); // 자동 커밋을 false로 한다. StringBuffer sql = new StringBuffer(); sql.append("UPDATE BOARD_COMMENT SET"); sql.append(" COMMENT_CONTENT = ?"); sql.append(" WHERE COMMENT_NUM = ?"); pstmt = conn.prepareStatement(sql.toString()); pstmt.setString(1, comment.getComment_content()); pstmt.setInt(2, comment.getComment_num()); int flag = pstmt.executeUpdate(); if(flag > 0){ result = true; conn.commit(); // 완료시 커밋 } } catch (Exception e) { try { conn.rollback(); // 오류시 롤백 } catch (SQLException sqle) { sqle.printStackTrace(); } e.printStackTrace(); throw new RuntimeException(e.getMessage()); } close(); return result; } // end updateComment // DB 자원해제 private void close() { try { if ( pstmt != null ){ pstmt.close(); pstmt=null; } if ( conn != null ){ conn.close(); conn=null; } } catch (Exception e) { throw new RuntimeException(e.getMessage()); } } // end close() } | cs |
■ CommentCommand.properties
댓글 수정에 대한 명령어를 추가한다.
1 2 3 4 5 6 7 8 9 | # Form Change CommentReplyFormAction.co=jsp.board.comment.action.CommentReplyFormAction CommentUpdateFormAction.co=jsp.board.comment.action.CommentUpdateFormAction # Action CommentWriteAction.co=jsp.board.comment.action.CommentWriteAction CommentReplyAction.co=jsp.board.comment.action.CommentReplyAction CommentDeleteAction.co=jsp.board.comment.action.CommentDeleteAction CommentUpdateAction.co=jsp.board.comment.action.CommentUpdateAction | cs |
3. 실행 결과
댓글을 수정하기 위해 [수정] 버튼을 클릭한다.
수정 화면이 나타나면 댓글 내용을 수정한다. 그리고 등록을 누른다.
그러면 댓글이 수정된 것을 확인할 수 있다.
4. 소스코드 다운로드 (war 파일)
'코딩 > JSP' 카테고리의 다른 글
[JSP개발] 게시판, 방명록, 댓글 줄바꿈 처리 (2) | 2017.01.08 |
---|---|
[JSP개발] 회원가입 - 아이디 중복체크 구현 (19) | 2017.01.06 |
[JSP개발] 게시판 - 댓글 삭제 (1) | 2017.01.04 |
[JSP개발] 게시판 - 댓글 답변 구현 (4) | 2017.01.03 |
[JSP개발] 게시판 - 댓글 작성 및 댓글 목록 (19) | 2017.01.02 |