Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

게으른 완벽주의자의 개발자 도전기

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

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