<form th:object="${reviewForm}" method="post">
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}" />
<div class="mb-3">
<label for="content" class="form-label">내용</label>
<textarea name="content" id="content" class="form-control" rows="10"></textarea>
</div>
<input type="submit" value="저장하기" class="btn btn-primary my-2">
</form>
이거를 book_detail에 그대로 넣어줬더니 405에러가 발생
수정되는 과정부터 자세히 분석
@PreAuthorize("isAuthenticated()")
@PostMapping("/modify/{id}")
public String reviewModify(@PathVariable("id") Integer id,@Valid ReviewForm reviewForm,
BindingResult bindingResult, Principal principal){
Review review = this.reviewService.getReview(id);
if (review == null) {
// 책이 존재하지 않는 경우에 대한 처리
return "redirect:/book/list"; // 예시로 책 목록 페이지로 리다이렉트
}
if (bindingResult.hasErrors()) {
return "book_detail";
}
Member author = review.getAuthor();
// 현재 로그인한 사용자가 해당 리뷰의 작성자인지 확인
if (!principal.getName().equals(author.getUsername())) {
// 작성자와 다른 사용자가 수정을 시도한 경우에 대한 처리
return "redirect:/books/list"; // 예시로 책 목록 페이지로 리다이렉트
}
review.setContent(reviewForm.getContent());
this.reviewService.modify(review, reviewForm.getContent());
return String.format("redirect:/book/detail/%s",review.getBook().getId());
}```
코드를 입력하세요
<h5 class="my-3 border-bottom pb-2">리뷰수정</h5>
<form th:action="@{|/review/modify/${review.id}|}" th:object="${reviewForm}" method="post">
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}" />
<div class="mb-3">
<label for="content" class="form-label">내용</label>
<textarea name="content" id="content" class="form-control" rows="10" th:text="${review.content}"></textarea>
</div>
<input type="submit" value="저장하기" class="btn btn-primary my-2">
</form>```
코드를 입력하세요
public void setContent(String content) {
this.content = content;
}
이렇게 해줬더니 일단 화면에서 수정은 되는데 데이터베이스에 기존것이 삭제가 안되어 있고 수정할 때마다 추가되고 있다.
public void modify(Review review, String content){
// 기존의 리뷰 객체의 내용을 업데이트
review.setContent(content);
review.setModifiedDate(LocalDateTime.now()); // 수정일 업데이트
reviewRepository.save(review); // 업데이트된 리뷰 저장
}
public void setContent(String content) {
this.content = content;
}
public void setModifiedDate(LocalDateTime now) {
}
이렇게 해줬더니 데이터베이스에도 잘 수정이 된다.
gpt에서 도움되었던 질문방식이
이게 현재 템플릿인데 ....이거를 추가하려고 하는데 그에 맞는 컨트롤러와 서비스의 기능을 추가해줘 방식으로 역으로 이미 만들어진 수정폼을 보여주고 그에 맞게 컨트롤러를 만들어보라 시켰다.