이번엔 게시글 수정 기능을 구현하는 과정이다.
전체적인 흐름은 다음과 같다.
- boardview.html에서 수정 링크를 추가한다
- 수정 링크를 눌렀을 때 수정페이지(boardmodify.html)로 연결되도록 맵핑하는 boardModify()를 Controller에 추가한다
- 수정 전의 게시글 제목과 내용을 불러오는 뷰(boardmodify.html)를 만든다
- 기존의 게시판내용에 새로 수정한 내용을 덮어 저장한 후, 수정이 끝나면 게시글 리스트로 돌아가는 boardUpdate()를 Controller에 추가한다
//boardview.html
...
<body>
<h1 th:text="${board.title}">제목입니다</h1>
<p th:text="${board.content}">내용이 들어갈 부분입니다</p>
<a th:href="@{/board/delete(id=${board.id})}">글삭제</a>
<a th:href="@{/board/modify/{id}(id=${board.id})}">수정</a>
</body>
boardview.html 뷰에서 수정 링크를 추가해준다
//boardController.java
...
@GetMapping("/board/modify/{id}")
public String boardModify(@PathVariable("id") Integer id,
Model model){
model.addAttribute("board", boardService.boardView(id));
return "boardmodify";
}
뷰에서 수정 링크를 누르면 이동하는 url을 boardmodify.html과 맵핑시켜주도록 Controller에서 boardModify()를 추가한다
@PathVariable이란?
@RequestParam과 @PathVariable의 차이
//boardmodify.html
...
<body>
<div class="layout">
<form th:action="@{/board/update/{id}(id=${board.id})}" method="post">
<input name="title" type="text" th:value="${board.title}">
<textarea name="content" th:text="${board.content}"></textarea>
<button type="submit">수정</button>
</form>
</div>
</body>
기존의 게시글 내용을 불러와 화면에 뿌려준다. 내용수정 후 수정 버튼을 누르면 post 방식으로 해당 데이터를 /board/update/{id}로 전달한다.
//boardController.java
...
@PostMapping("/board/update/{id}")
public String boardUpdate(@PathVariable("id") Integer id, Board board){
Board boardTemp = boardService.boardView(id);//기존 게시글
boardTemp.setTitle(board.getTitle());// title 변경
boardTemp.setContent(board.getContent());//content 변경
boardService.write(boardTemp);//DB에 저장
return "redirect:/board/list";
}
기존 게시글을 boardTemp에 담고, set(), get() 메서드를 이용해서 수정한 게시글의 title과 content로 변경한 후에 boardService를 호출해서 DB에 다시 저장한다.
[출처] 위 내용은 한코딩님의 강의를 보고 정리한 내용입니다