수정 기능
저번장에서 read.jsp에 삭제버튼과 수정버튼을 만들었습니다.
이제 수정 기능부터 구현하도록 하겠습니다.
BoardController에 update 메소드를 작성하겠습니다.
@RequestMapping(value = "/update", method = RequestMethod.GET)
public void updateGET(@RequestParam("board_number") Integer board_number, Model model) throws Exception {
logger.info("updateGET!!!");
BoardVO board = service.read(board_number);
model.addAttribute("BoardVO", board);
}
@RequestMapping(value = "/update", method = RequestMethod.POST)
public String updatePOST(BoardVO board, RedirectAttributes ra) throws Exception {
logger.info("updateGET!!!");
service.update(board);
ra.addFlashAttribute("result", "updateOK");
return "redirect:/board/read?board_number="+board.getBoard_number();
}
read.jsp에서 수정버튼을 누르면 updateGET 메서드가 호출되어서 수정할 게시물의 데이터를 조회하여 수정 창을 보여줍니다.
그 다음 사용자가 수정 하려는 데이터를 입력하고 저장버튼을 누르면 updatePOST메서드가 실행되어서, 서비스 객체를 이용해서 DB 값을 수정 하고 난뒤 해당 게시물의 read.jsp를 redirect하는 방식입니다.
이제 update.jsp를 작성하겠습니다.
board/view 폴더에 update.jsp를 생성하구요
read.jsp의 코드를 가져와서 몇 가지만 수정할건데요
read.jsp에서 제목, 내용, 작성자가 readonly로 되어있는데 작성자는 그대로 readonly로 두고,
제목과 내용은 readonly를 지워줍니다.
그리고 저희는 update할것이기 때문에 form태그로 해당 코드를 감싸줄겁니다.
다음과 같이 작성합니다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>게시판</title>
</head>
<body>
<form method="post">
<div>글번호 : ${BoardVO.board_number}</div>
<input type="hidden" name="board_number" value="${BoardVO.board_number}"/>
<div>
<div>
<label for="title">제목</label>
<input type="text" id="title" name="title" value="${BoardVO.title}"/>
</div>
<div>
<label for="contents">내용</label>
<textarea name="contents" id="contents" rows="3">${BoardVO.contents}</textarea>
</div>
<div>
<label for="name">작성자</label>
<input type="text" name="name" id="name" value="${BoardVO.name}" readonly="readonly"/>
</div>
</div>
<div>
<button type="submit">등록</button>
<button><a href="/board/read?board_number=${BoardVO.board_number}">취소</a></button>
</div>
</form>
</body>
</html>
아까 updatePOST에서 model 값을 보냈는데 그 값을 받아서 업데이트가 되었다고 경고창을 띄워 보겠습니다.
<!-- read.jsp -->
<script>
var result = '${result}';
if(result === 'updateOK') {
alert("수정되었습니다.");
}
</script>
삭제 기능
수정 기능을 작성했으니 이제 삭제를 하는 메서드를 만들겠습니다.
BoardController에 delete메서드를 작성합니다.
@RequestMapping(value = "/delete", method = RequestMethod.GET)
public void deleteGET(@RequestParam("board_number") Integer board_number, Model model) throws Exception {
logger.info("deleteGET");
BoardVO board = service.read(board_number);
model.addAttribute("BoardVO", board);
}
@RequestMapping(value = "delete", method = RequestMethod.POST)
public String deletePOST(@RequestParam("board_number") Integer board_number, RedirectAttributes ra) throws Exception {
logger.info("deletePOST");
service.delete(board_number);
ra.addFlashAttribute("result", "deleteOK");
return "redirect:/board/listAll";
}
GET에서는 update 메서드와 마찬가지고 board_number를 파라미터로 받아서 글번호를 출력하고,
POST에서도 board_number를 파라미터로 받아서 글을 삭제 하겠습니다.
이제 delete.jsp의 뷰를 만들어 볼 것입니다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>게시판</title>
</head>
<body>
<div>글번호 : ${BoardVO.board_number}</div>
<br/>
정말로 삭제하시겠습니까?
<br />
<div>
<form action="/board/delete?board_number=${BoardVO.board_number}" method="post">
<a><button>예 삭제합니다</button></a>
</form>
<button><a href="/board/read?board_number=${BoardVO.board_number}">취소</a></button>
</div>
</body>
</html>
controller를 수정했으니 서버를 재가동 시키고 삭제를 해보겠습니다.
28번 게시글을 지우는 것을 확인했으니 마지막으로 잘 삭제가 되었다고 경고창을 띄우러 가겠습니다.
BoardController -> deletePOST 메서드의 리턴값이 listAll을 향하고 있으니
listAll.jsp에 script를 작성해야겠죠?
아래와 같이 작성합니다.
<!-- listAll.jsp -->
<script>
var register = "${register}";
if(register === "registerOK") {
alert("등록 되었습니다.");
}
var result = "${result}";
if(result === "deleteOK") {
alert("삭제 되었습니다.");
}
</script>
경고창이 잘 뜨는지 확인해볼까요?
정상적으로 작동하는것을 확인했습니다.
지금까지 글작성, 수정, 삭제 기능을 구현했으니 다음 장에는 게시글 목록을 깔끔하게 보기 위하여
다음 장에는 페이징 기능을 구현하겠습니다!!