Template

Template 게시판, 회원관리, 댓글관리 나눠서 관리하기5(mapper, service, controller 댓글 목록, 댓글 삭제)

머리방울 2022. 8. 9. 23:32

1. 댓글 목록

1) mapper sql 작성

<resultMap type="dto.ReplyDTO" id="reply">
<id column="REPLY_NUM" property="replyNum"/>
<result column="CONTENT"  property="content"/>
<result column="WRITER"  property="writer"/>
<result column="CREATE_DATE"  property="createDate"/>
<result column="BOARD_NUM"  property="boardNum"/>
</resultMap>



<select id="selectReply" resultMap="reply">
SELECT 
CONTENT 
, WRITER
, REPLY_NUM
, BOARD_NUM
, TO_CHAR(CREATE_DATE,'YYYY-MM-DD HH24:MI') AS CREATE_DATE
FROM BOARD_REPLY
WHERE BOARD_NUM = #{boardNum}
ORDER BY REPLY_NUM DESC
</select>

2) 인터페이스 메소드 생성

List<ReplyDTO> selectReply(int boardNum);



@Override
public List<ReplyDTO> selectReply(int boardNum) {
List<ReplyDTO> replyDTO = sqlSession.selectList("replyMapper.selectReply", boardNum);
sqlSession.commit();
return replyDTO;
}

3) controller

댓글 목록을 우리는 상세페이지에서 보여줄 것이다. 

그래서 BoardController에 상세페이지로 가는 else if문 안에 작성한다.

 

 List<ReplyDTO> replyList = replyService.selectReply(boardNum);
request.setAttribute("replyList", replyList);


contentPage = "board_detail.jsp";

4) jsp

나는 choose when otherwise를 이용해서 게시글이 나오도록 만들었다.

<h4>댓글</h4>
<c:choose>
<c:when test="${replyList.size() eq 0}">
<div>
	<div>첫 댓글을 등록해보세요.</div>
</div>
</c:when>
<c:otherwise>
<c:forEach var="reply" items="${replyList }">
<div class="reply">
<div>
    <div>${reply.writer }</div>
    <div>${reply.createDate }</div>
    <div>${reply.content }</div> 



삭제버튼의 경우에도 실제 작성자와 관리자에게만 삭제버튼이 보이도록 설정했다.

삭제 버튼 눌렀을 때 처리에 필요한 데이터 두개를 input에 넣고 form 태그에 감쌌다.
    <c:if test="${sessionScope.loginInfo.isAdmin eq 'Y' or sessionScope.loginInfo.memId eq reply.writer}">
        <form action="deleteReply.re" method="post">
            <input type="hidden" name="replyNum" value="${reply.replyNum }">
            <input type="hidden" name="boardNum" value="${reply.boardNum }">
            (${board.boardNum}이거 넣어도 동일하다 )
        <div> <input type="submit" value="삭제" ></div>
        </form>
</c:if>
</div>
</div>
</c:forEach>
</c:otherwise>
</c:choose>

2. 댓글 삭제

1)mapper sql 작성

<delete id="deleteReply">
DELETE BOARD_REPLY
WHERE REPLY_NUM = #{replyNum} 
</delete>

2)인터페이스 메소드 작성

void deleteReply(int replyNum);



@Override
public void deleteReply(int replyNum) {
sqlSession.delete("replyMapper.deleteReply", replyNum);
sqlSession.commit();
}

3) controller

else if(command.equals("/deleteReply.re")) {

    int replyNum = Integer.parseInt(request.getParameter("replyNum"));
    int boardNum = Integer.parseInt(request.getParameter("boardNum"));

    replyService.deleteReply(replyNum);

    page = "boardDetail.bo?boardNum="+boardNum;
    isRedirect=true;
}