@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파일 보고있었는데....