MelonPeach

15.스프링 게시판 만들기 / 게시판 댓글 수정, 삭제 기능 구현

안녕하세요? 

MelonPeach입니다.

이전에 게시판 댓글 작성에 대해 포스팅 하였는데요.

이번에는 게시판에서의 댓글 수정과 삭제에 대해서 포스팅하겠습니다.

 

 

1. 댓글 수정과 삭제를 위한 쿼리 작성


스프링 게시판 만들기 댓글 replyMapper.xml

 

replyMapper.xml에 댓글 수정과 댓글 삭제, 선택된 댓글 조회 쿼리를 작성해줍니다.

여기서 선택된 댓글 조회쿼리는 댓글 번호를 파라미터로 받아 그 번호에 해당하는 댓글을 수정하거나 삭제하기 위함입니다.

 

<!-- 댓글 수정 -->
	<update id="updateReply" parameterType="kr.co.vo.ReplyVO">
		UPDATE MP_REPLY SET CONTENT = #{content}
		WHERE RNO = #{rno}
	</update>

<!-- 댓글 삭제 -->
	<delete id="deleteReply" parameterType="kr.co.vo.ReplyVO">
		DELETE FROM MP_REPLY
		WHERE RNO = #{rno}
	</delete>
	
<!-- 선택된 댓글 조회 -->
	<select id="selectReply" resultType="kr.co.vo.ReplyVO">
		SELECT
				BNO
			  , RNO
			  , CONTENT
			  , WRITER
			  , REGDATE
		  FROM MP_REPLY
		 WHERE RNO = #{rno}
	</select>

 

 

 

2. ReplyDAO, ReplyService 작성


스프링 게시판 만들기 댓글 ReplyDAO, ReplyService

ReplyDAO, ReplyService를 작성해줍니다.


 

 

 

3. BoardController에 댓글 수정 코드 추가


스프링 게시판 만들기 댓글 BoardController.java

 

BoardController.java에 댓글 수정 페이지에 접근하기 위한 컨트롤러와 수정한 값을 전송할 수 있는 컨트롤러를 작성해 줍니다.

 

//댓글 수정 GET
	@RequestMapping(value="/replyUpdateView", method = RequestMethod.GET)
	public String replyUpdateView(ReplyVO vo, SearchCriteria scri, Model model) throws Exception {
		logger.info("reply Write");
		
		model.addAttribute("replyUpdate", replyService.selectReply(vo.getRno()));
		model.addAttribute("scri", scri);
		
		return "board/replyUpdateView";
	}
	
	//댓글 수정 POST
	@RequestMapping(value="/replyUpdate", method = RequestMethod.POST)
	public String replyUpdate(ReplyVO vo, SearchCriteria scri, RedirectAttributes rttr) throws Exception {
		logger.info("reply Write");
		
		replyService.updateReply(vo);
		
		rttr.addAttribute("bno", vo.getBno());
		rttr.addAttribute("page", scri.getPage());
		rttr.addAttribute("perPageNum", scri.getPerPageNum());
		rttr.addAttribute("searchType", scri.getSearchType());
		rttr.addAttribute("keyword", scri.getKeyword());
		
		return "redirect:/board/readView";
	}

 

 

 

4. BoardController에 댓글 삭제 코드 추가


 

스프링 게시판 만들기 댓글 BoardController.java

 

댓글 수정과 마찬가지로 댓글 삭제 페이지에 들어가기 위한 컨트롤러와 삭제 컨트롤러를 작성해 줍니다.

 

//댓글 삭제 GET
	@RequestMapping(value="/replyDeleteView", method = RequestMethod.GET)
	public String replyDeleteView(ReplyVO vo, SearchCriteria scri, Model model) throws Exception {
		logger.info("reply Write");
		
		model.addAttribute("replyDelete", replyService.selectReply(vo.getRno()));
		model.addAttribute("scri", scri);
		

		return "board/replyDeleteView";
	}
	
	//댓글 삭제
	@RequestMapping(value="/replyDelete", method = RequestMethod.POST)
	public String replyDelete(ReplyVO vo, SearchCriteria scri, RedirectAttributes rttr) throws Exception {
		logger.info("reply Write");
		
		replyService.deleteReply(vo);
		
		rttr.addAttribute("bno", vo.getBno());
		rttr.addAttribute("page", scri.getPage());
		rttr.addAttribute("perPageNum", scri.getPerPageNum());
		rttr.addAttribute("searchType", scri.getSearchType());
		rttr.addAttribute("keyword", scri.getKeyword());
		
		return "redirect:/board/readView";
	}

 

 

 

5. readView에서 버튼 생성


스프링 게시판 만들기 댓글 readView.jsp

 

readView.jsp에서 댓글을 작성하면 그 아래에 수정과 삭제 버튼을 클릭할 수 있게 만들어 줍니다.

 

<div>
  <button type="button" class="replyUpdateBtn" data-rno="${replyList.rno}">수정</button>
  <button type="button" class="replyDeleteBtn" data-rno="${replyList.rno}">삭제</button>
</div>

 

 

 

6. readView.jsp에서 스크립트 작성


스프링 게시판 만들기 댓글 readView.jsp

 

댓글 수정과 삭제 버튼을 만들었으면 버튼을 컨트롤할 수 있게 스크립트에 클릭 이벤트를 만들어 주어요.

수정 버튼을 클릭했을 때 url주소가 게시판 bno, page, perPageNum, searchType, keyword 그리고 댓글번호인 rno가 들어가 있는것이 보입니다. 여기서 $(this).attr("data-rno")는 클릭 이벤트가 발생한 수정 버튼의 data-rno값을 가져오겠다는 말이에요.

 

//댓글 수정 View
	$(".replyUpdateBtn").on("click", function(){
		location.href = "/board/replyUpdateView?bno=${read.bno}"
						+ "&page=${scri.page}"
						+ "&perPageNum=${scri.perPageNum}"
						+ "&searchType=${scri.searchType}"
						+ "&keyword=${scri.keyword}"
						+ "&rno="+$(this).attr("data-rno");
	});
			
//댓글 삭제 View
	$(".replyDeleteBtn").on("click", function(){
		location.href = "/board/replyDeleteView?bno=${read.bno}"
			+ "&page=${scri.page}"
			+ "&perPageNum=${scri.perPageNum}"
			+ "&searchType=${scri.searchType}"
			+ "&keyword=${scri.keyword}"
			+ "&rno="+$(this).attr("data-rno");
	});

 

 

 

7. readUpdateView, readDeleteView 생성


스프링 게시판 만들기 댓글

 

board폴더에 replyUpdateView.jsp와 replyDeleteView.jsp를 만들어줍니다.

만든 후 코드를 추가해 줍니다.

 

replyUpdateView.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<html>
	<head>
		<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
	 	<title>게시판</title>
	</head>
	<script type="text/javascript">
		$(document).ready(function(){
			var formObj = $("form[name='updateForm']");
			
			$(".cancel_btn").on("click", function(){
				location.href = "/board/readView?bno=${replyUpdate.bno}"
					   + "&page=${scri.page}"
					   + "&perPageNum=${scri.perPageNum}"
					   + "&searchType=${scri.searchType}"
					   + "&keyword=${scri.keyword}";
			})
			
		})
		
	</script>
	<body>
	
		<div id="root">
			<header>
				<h1> 게시판</h1>
			</header>
			<hr />
			 
			<div>
				<%@include file="nav.jsp" %>
			</div>
			<hr />
			
			<section id="container">
				<form name="updateForm" role="form" method="post" action="/board/replyUpdate">
					<input type="hidden" name="bno" value="${replyUpdate.bno}" readonly="readonly"/>
					<input type="hidden" id="rno" name="rno" value="${replyUpdate.rno}" />
					<input type="hidden" id="page" name="page" value="${scri.page}"> 
					<input type="hidden" id="perPageNum" name="perPageNum" value="${scri.perPageNum}"> 
					<input type="hidden" id="searchType" name="searchType" value="${scri.searchType}"> 
					<input type="hidden" id="keyword" name="keyword" value="${scri.keyword}"> 
					<table>
						<tbody>
							<tr>
								<td>
									<label for="content">댓글 내용</label><input type="text" id="content" name="content" value="${replyUpdate.content}"/>
								</td>
							</tr>	
							
						</tbody>			
					</table>
					<div>
						<button type="submit" class="update_btn">저장</button>
						<button type="button" class="cancel_btn">취소</button>
					</div>
				</form>
			</section>
			<hr />
		</div>
	</body>
</html>

 

replyDeleteView.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<html>
	<head>
		<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
	 	<title>게시판</title>
	</head>
	<script type="text/javascript">
		$(document).ready(function(){
			var formObj = $("form[name='updateForm']");
			
			$(".cancel_btn").on("click", function(){
				location.href = "/board/readView?bno=${replyDelete.bno}"
					   + "&page=${scri.page}"
					   + "&perPageNum=${scri.perPageNum}"
					   + "&searchType=${scri.searchType}"
					   + "&keyword=${scri.keyword}";
			})
			
		})
		
	</script>
	<body>
	
		<div id="root">
			<header>
				<h1> 게시판</h1>
			</header>
			<hr />
			 
			<div>
				<%@include file="nav.jsp" %>
			</div>
			<hr />
			
			<section id="container">
				<form name="updateForm" role="form" method="post" action="/board/replyDelete">
					<input type="hidden" name="bno" value="${replyDelete.bno}" readonly="readonly"/>
					<input type="hidden" id="rno" name="rno" value="${replyDelete.rno}" />
					<input type="hidden" id="page" name="page" value="${scri.page}"> 
					<input type="hidden" id="perPageNum" name="perPageNum" value="${scri.perPageNum}"> 
					<input type="hidden" id="searchType" name="searchType" value="${scri.searchType}"> 
					<input type="hidden" id="keyword" name="keyword" value="${scri.keyword}"> 
						
					<div>
						<p>삭제 하시겠습니까?</p>
						<button type="submit" class="delete_btn">예 삭제합니다.</button>
						<button type="button" class="cancel_btn">아니오. 삭제하지 않습니다.</button>
					</div>
				</form>
			</section>
			<hr />
		</div>
	</body>
</html>

 

 

 

8. 댓글 수정, 삭제 테스트


스프링 게시판 만들기 수정, 삭제 테스트

 

게시판 댓글에 수정과 삭제버튼을 눌러서 테스트를 해봅니다.


 

 

스프링 게시판 만들기에서 현재 댓글까지 만들어 보았는데요.

게시판의 외형이 마음에 들지 않아서요. 

다음 포스팅에서는 부트 스트랩을 이용하여 살짝 꾸며볼까 합니다.

이 글을 공유합시다

facebook twitter googleplus kakaostory naver