실수(1)

강찬우·2023년 11월 29일

@PreAuthorize("isAuthenticated()")
    @PostMapping("/create/{id}")
    public String createAnswer(Model model, @PathVariable("id") Integer id
            ,@Valid AnswerForm answerForm,BindingResult bindingResult, Principal principal)
    {
        Question question = questionService.getQuestion(id);
        SiteUser siteUser = this.userService.getUser(principal.getName());
        System.out.println(bindingResult.toString());
        if(bindingResult.hasErrors()){
            model.addAttribute("question",question);
            return "question_detail";
        }
        Answer answer = this.answerService.create(question, answerForm.getContent(), siteUser);
        return String.format("redirect:/question/detail/%s#answer_%s",answer.getQuestion().getId(),answer.getId());
    }

이 코드에는 문제점이 있다. 물론 이코드만 봐서는 문제를 찾을 수 없다. 하지만
타임리프로 작성한 question_detail.html에는 모델에 qeustion만을 담는 것이 아니라 paging에 대한 정보 또한 담아주어야 한다.

@PreAuthorize("isAuthenticated()")
    @PostMapping("/create/{id}")
    public String createAnswer(Model model, @PathVariable("id") Integer id
            ,@Valid AnswerForm answerForm,BindingResult bindingResult, Principal principal)
    {
        Question question = questionService.getQuestion(id);
        SiteUser siteUser = this.userService.getUser(principal.getName());
        System.out.println(bindingResult.toString());
        if(bindingResult.hasErrors()){
            model.addAttribute("question",question);
            Page<Answer> paging = answerService.getList(0,question.getId());
            model.addAttribute("paging",paging);
            return "question_detail";
        }
        Answer answer = this.answerService.create(question, answerForm.getContent(), siteUser);
        return String.format("redirect:/question/detail/%s#answer_%s",answer.getQuestion().getId(),answer.getId());
    }

원래 코드에서는 입력창이 빈칸일때 등록 버튼을 누르면 오류메시지가 떠야 하지만 위의 코드로 작성하면 question_detail뷰로 이동할때 paging에 대한 정보가 없어 에러가 발생하게된다...
html파일에 문제가 있다고 생각해서 몇시간 동안 html파일 보고있었는데....

0개의 댓글