댓글 삭제는 기존과 동일하게 넘겨 받은 댓글 번호(reno)를 삭제 처리해 주면 된다.
public boolean deleteBoard6Reply(String param) {
Integer cnt = sqlSession.selectOne("selectBoard6ReplyChild", param);
if ( cnt > 0) {
return false;
}
sqlSession.update("updateBoard6ReplyOrder4Delete", param);
sqlSession.delete("deleteBoard6Reply", param);
return true;
}
Board6Svc.java
다만, 삭제하기 전에 삭제하려는 대상의 댓글보다 순번이 큰 댓글들의 순서(reorder) 값은 1씩 빼서 순서 값을 맞춰 주는 것이 좋다.
하지 않아도 되지만 값이 들쑥날쑥 한 것이 보기에 좋지 않아서 처리한다.
<update id="updateBoard6ReplyOrder4Delete" parameterType="gu.board6.BoardReplyVO">
UPDATE TBL_BOARDREPLY TBR1
INNER JOIN TBL_BOARDREPLY TBR2 ON TBR2.BRDNO=TBR1.BRDNO AND TBR1.REORDER >TBR2.REORDER AND TBR1.REDELETEFLAG='N'
SET TBR1.REORDER = TBR1.REORDER - 1
WHERE TBR2.RENO=#{reno}
</update>
board6.xml
마지막으로 다음의 SQL 문은 자식 댓글 수를 계산하는 것으로,
자식 댓글이 있으면(cnt > 0) 삭제 하지 않도록 한다.
자식 댓글이 있는데 삭제 하면 화면 리스트에서 트리처럼 보이도록 한 것이 틀어지고
글 내용도 이해 할 수 없게 된다.
<select id="selectBoard6ReplyChild" resultType="Integer" parameterType="String">
SELECT COUNT(*)
FROM TBL_BOARDREPLY
WHERE REPARENT=#{reparent} AND RENO!=#{reparent} AND REDELETEFLAG='N'
</select>
board6.xml
자식 댓글이 있으면 서비스에서 false 값을 반환 받게 되고
컨트롤에서는 BoardFailure.jsp 를 호출해서 오류 메시지를 출력해 준다.
public String board6ReplyDelete(HttpServletRequest request, BoardReplyVO boardReplyInfo) {
if (!boardSvc.deleteBoard6Reply(boardReplyInfo.getReno()) ) {
return "board6/BoardFailure";
}
return "redirect:/board6Read?brdno=" + boardReplyInfo.getBrdno();
}
Board6Ctr.java
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<script>
alert("다른 사람의 댓글이 있어서 삭제할 수 없습니다.");
history.back(-1);
</script>
BoardFailure.jsp
'Java > 게시판 6: 무한댓글' 카테고리의 다른 글
1. 무한 댓글 시작하기 (14) | 2016.05.15 |
---|---|
2. 무한 댓글 리스트 (11) | 2016.05.15 |
3. 무한 댓글 쓰기 – control (3) | 2016.05.15 |
4. 무한 댓글 쓰기 – JSP (0) | 2016.05.15 |
6. 무한 댓글 삭제 II (0) | 2016.05.15 |