수정페이지를 상세페이지로 가져오기

류한선·2024년 3월 12일

2차 프로젝트

목록 보기
13/32
<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에서 도움되었던 질문방식이
이게 현재 템플릿인데 ....이거를 추가하려고 하는데 그에 맞는 컨트롤러와 서비스의 기능을 추가해줘 방식으로 역으로 이미 만들어진 수정폼을 보여주고 그에 맞게 컨트롤러를 만들어보라 시켰다.

0개의 댓글