📝 댓글 삭제 기능
💡 VS Code
🔎 reply.jsp
...
<c:if test="${loginMember.memberNo == reply.memberNo}">
<div class="reply-btn-area">
<button>수정</button>
<button onclick="deleteReply(${reply.replyNo})">삭제</button>
</div>
</c:if>
...
🔎 reply.js
function selectReplyList(){
$.ajax({
url : contextPath + "/reply/selectReplyList",
data : {"boardNo" : boardNo},
type : "get",
dataType : "JSON",
success : function(rList){
console.log(rList);
const replyList = document.getElementById("reply-list");
replyList.innerHTML = "";
for(let reply of rList){
const replyRow = document.createElement("li");
replyRow.classList.add("reply-row");
const replyWriter = document.createElement("p");
replyWriter.classList.add("reply-writer");
const profileImage = document.createElement("img");
if(reply.profileImage != null){
profileImage.setAttribute("src", contextPath + reply.profileImage);
} else{
profileImage.setAttribute("src", contextPath + "/resources/images/user.png");
}
const memberNickname = document.createElement("span");
memberNickname.innerText = reply.memberNickname;
const replyDate = document.createElement("span");
replyDate.classList.add("reply-date");
replyDate.innerText = "(" + reply.createDate + ")";
replyWriter.append(profileImage, memberNickname, replyDate);
const replyContent = document.createElement("p");
replyContent.classList.add("reply-content");
replyContent.innerHTML = reply.replyContent;
replyRow.append(replyWriter, replyContent);
if(loginMemberNo == reply.memberNo){
const replyBtnArea = document.createElement("div");
replyBtnArea.classList.add("reply-btn-area");
const updateBtn = document.createElement("button");
updateBtn.innerText = "수정";
const deleteBtn = document.createElement("button");
deleteBtn.innerText = "삭제";
deleteBtn.setAttribute( "onclick", "deleteReply("+ reply.replyNo + ")" );
replyBtnArea.append(updateBtn, deleteBtn);
replyRow.append(replyBtnArea);
}
replyList.append(replyRow);
}
},
error : function(){
console.log("에러 발생");
}
});
}
const addReply = document.getElementById("addReply");
const replyContent = document.getElementById("replyContent");
addReply.addEventListener("click", function(){
if(loginMemberNo == ""){
alert("로그인 후 이용해 주세요.");
return;
}
if(replyContent.value.trim().length == 0){
alert("댓글을 작성한 후 버튼을 클릭해 주세요.");
replyContent.value = "";
replyContent.focus();
return;
}
$.ajax({
url : contextPath + "/reply/insert",
data : {"replyContent" : replyContent.value,
"memberNo" : loginMemberNo,
"boardNo" : boardNo},
type : "post",
success : function(result){
if(result > 0){
alert("댓글이 등록되었습니다.");
replyContent.value = "";
selectReplyList();
} else{
alert("댓글 등록에 실패했습니다..");
}
},
error : function(req, status, error){
console.log("댓글 등록 실패")
console.log(req.responseText);
}
});
})
function deleteReply(replyNo){
if( confirm("정말로 삭제하시겠습니까?") ){
$.ajax({
url : contextPath + "/reply/delete",
data : {"replyNo" : replyNo},
type : "get",
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("delete")) {
int replyNo = Integer.parseInt( req.getParameter("replyNo") );
int result = service.deleteReply(replyNo);
resp.getWriter().print(result);
}
...
🔎 ReplyService.java
public int deleteReply(int replyNo) throws Exception {
Connection conn = getConnection();
int result = dao.deleteReply(conn, replyNo);
if(result > 0) commit(conn);
else rollback(conn);
close(conn);
return result;
}
🔎 ReplyDAO.java
public int deleteReply(Connection conn, int replyNo) throws Exception {
int result = 0;
try {
String sql = prop.getProperty("deleteReply");
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, replyNo);
result = pstmt.executeUpdate();
} finally {
close(pstmt);
}
return result;
}
🔎 reply-sql.xml
<entry key="deleteReply">
UPDATE REPLY SET
REPLY_ST = 'Y'
WHERE REPLY_NO = ?
</entry>