📝 댓글 수정 기능
💡 VS Code
🔎 reply.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<div id="reply-area">
<div class="reply-list-area">
<ul id="reply-list">
<c:forEach var="reply" items="${rList}">
<li class="reply-row">
<p class="reply-writer">
<c:if test="empty reply.profileImage">
<img src="${contextPath}/resources/images/user.png">
</c:if>
<c:if test="!empty reply.profileImage">
<img src="${contextPath}${reply.profileImage}">
</c:if>
<span>${reply.memberNickname}</span>
<span class="reply-date"> ${reply.createDate} </span>
</p>
<p class="reply-content">${reply.replyContent}</p>
<c:if test="${loginMember.memberNo == reply.memberNo}">
<div class="reply-btn-area">
<button onclick="showUpdateReply(${reply.replyNo}, this)">수정</button>
<button onclick="deleteReply(${reply.replyNo})">삭제</button>
</div>
</c:if>
</li>
</c:forEach>
</ul>
</div>
<div class="reply-write-area">
<textarea id="replyContent"></textarea>
<button id="addReply">
댓글<br>
등록
</button>
</div>
</div>
🔎 reply.js
let beforeReplyRow;
function showUpdateReply(replyNo, btn){
const temp = document.getElementsByClassName("update-textarea");
if(temp.length > 0){
if(confirm("다른 댓글이 수정 중입니다. 현재 댓글을 수정 하시겠습니까?")){
temp[0].parentElement.innerHTML = beforeReplyRow;
} else{
return;
}
}
const replyRow = btn.parentElement.parentElement
beforeReplyRow = replyRow.innerHTML;
let beforeContent = replyRow.children[1].innerHTML;
replyRow.innerHTML = "";
const textarea = document.createElement("textarea");
textarea.classList.add("update-textarea");
beforeContent = beforeContent.replaceAll("&", "&");
beforeContent = beforeContent.replaceAll("<", "<");
beforeContent = beforeContent.replaceAll(">", ">");
beforeContent = beforeContent.replaceAll(""", "\"");
beforeContent = beforeContent.replaceAll("<br>", "\n");
textarea.value = beforeContent;
replyRow.append(textarea);
const replyBtnArea = document.createElement("div");
replyBtnArea.classList.add("reply-btn-area");
const updateBtn = document.createElement("button");
updateBtn.innerText = "수정";
updateBtn.setAttribute("onclick", "updateReply(" +replyNo+ ", this)");
const cancelBtn = document.createElement("button");
cancelBtn.innerText = "취소";
cancelBtn.setAttribute("onclick", "updateCancel(this)");
replyBtnArea.append(updateBtn, cancelBtn);
replyRow.append(replyBtnArea);
}
function updateCancel(btn){
if(confirm("댓글 수정을 취소하시겠습니까?")){
btn.parentElement.parentElement.innerHTML = beforeReplyRow;
}
}
function updateReply(replyNo, btn){
const replyContent = btn.parentElement.previousElementSibling.value;
$.ajax({
url : contextPath + "/reply/update",
data : {"replyNo" : replyNo,
"replyContent" : replyContent},
type : "POST",
success : function(result){
if(result > 0){
alert("댓글이 수정되었습니다.");
selectReplyList();
}else{
alert("댓글 수정 실패");
}
},
error : function(req, status, error){
console.log("댓글 수정 실패");
console.log(req.responseText);
}
});
}
💡 Eclipse
🔎 ReplyController.java
...
if(command.equals("update")) {
int replyNo = Integer.parseInt( req.getParameter("replyNo") );
String replyContent = req.getParameter("replyContent");
int result = service.updateReply(replyNo, replyContent);
resp.getWriter().print(result);
}
...
🔎 ReplyService.java
...
public int updateReply(int replyNo, String replyContent) throws Exception{
Connection conn = getConnection();
replyContent = Util.XSSHandling(replyContent);
replyContent = Util.newLineHandling(replyContent);
int result = dao.updateReply(conn, replyNo, replyContent);
if(result > 0) commit(conn);
else rollback(conn);
close(conn);
return result;
}
🔎 ReplyDAO.java
public int updateReply(Connection conn, int replyNo, String replyContent) throws Exception {
int result = 0;
try {
String sql = prop.getProperty("updateReply");
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, replyContent);
pstmt.setInt(2, replyNo);
result = pstmt.executeUpdate();
} finally {
close(pstmt);
}
return result;
}
🔎 reply-sql.xml
<entry key="updateReply">
UPDATE REPLY SET
REPLY_CONTENT = ?
WHERE REPLY_NO = ?
</entry>
정리를 잘해놓으셨네요..!