728x90
https://kyuhyuk.kr/article/spring-boot/2020/07/21/Spring-Boot-JPA-MySQL-Board-Post-Update-Delete
오늘도 이 분의 코드를 참고했습니다.
Controller 추가
@GetMapping("/post/edit/{id}")
public String edit(@PathVariable("id") Long id, Model model) {
BoardDto boardDto = boardService.findById(id);
model.addAttribute("post", boardDto);
return "board/edit.html";
}
@PutMapping("/post/edit/{id}")
public String update(@PathVariable Long id, BoardUpdateDto requestDto){
boardService.update(id,requestDto);
return "redirect:/board/list";
}
수정 버튼을 누르면 /post/edit/글번호의 url로 요청을 보냅니다. 수정을 위한 페이지를 응답해주고 거기서 form을 통해 put 요청이 들어오거든 update 연산을 수행합니다. 필요한 부분만 이렇게 잘라서 보여드리는데 원래의 Controller 코드 길이가 점점 길어지네요. 이걸 어떻게 리팩터링 하지 흠...
BoardService 수정
@Transactional
public Long update(Long id, BoardUpdateDto boardUpdateDto){
Board board = boardRepository.findById(id).orElseThrow(()->new IllegalArgumentException("해당 게시글이 없습니다. id = "+id));
board.update(boardUpdateDto.getTitle(), boardUpdateDto.getContent());
return id;
}
글의 id는 변하면 안되고 title 하고 content정도는 수정이 가능하겠죠. 관련 내용 update를 호출해줍니다.
properties 수정
spring.mvc.hiddenmethod.filter.enabled=true
예전에 spring 게시판 만들때는 이런 거 안 해줬는데.. 다른 분들 글을 보면 GET이나 POST 외에 PUT, DELETE를 사용하려면 이런 hiddenmethod filter 설정을 해줘야 된다네요.
프론트 수정
거창한 내용을 다루지는 않겠습니다. 윗분의 edit.html을 그대로 사용하면 content 부분에 기존 값이 세팅이 안된 모습을 보실 수 있습니다.
<div class="form-group row">
<label for="inputContent" class="col-sm-2 col-form-label"><strong>내용</strong></label>
<div class="col-sm-10">
<textarea type="text" name="content" class="form-control" id="inputContent" th:text="${post.content}"></textarea>
</div>
</div>
th:text 속성으로 바꿔주면 DB에 있던 내용 그대로 화면에 출력되는 것을 확인할 수 있습니다.
또한 저 같은 경우에는 csrf를 사용하기 때문에 토큰을 hidden으로 주는 거 잊지 말아 주세요.
728x90
'web > spring&spring boot' 카테고리의 다른 글
[spring boot] 스프링 부트 게시판 검색 기능 구현하기 (0) | 2021.06.06 |
---|---|
[spring boot] 스프링 부트 게시판 글 삭제 구현하기 (0) | 2021.06.05 |
[spring boot] 스프링 시큐리티 세션 활용하기 (0) | 2021.05.21 |
[spring boot] 스프링 부트 게시판 글 조회 구현하기 (0) | 2021.05.20 |
[spring boot] 스프링 부트 게시판 등록 구현하기(2) (0) | 2021.05.19 |