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;
}