이전 글 처럼 답변 작성에 form이 비어있을 경우, 오류창을 띄우는 방법을 알아보자.
1. AnswerForm class를 만든다.
answer의 내용을 적는 form이 비어있는지, 아닌지에 대해서 검증하기 위해 사용하는 AnswerForm 객체를 만든다.
@Getter
@Setter
public class AnswerForm {
@NotEmpty(message = "내용은 필수항목입니다.")
private String content;
}
2. Controller 수정
@PostMapping("/create/{id}")
public String createAnswer(Model model, @PathVariable("id") Integer id,
@Valid AnswerForm answerForm, BindingResult bindingResult) {
Question question = this.questionService.getQuestion(id);
if (bindingResult.hasErrors()) {
model.addAttribute("question", question);
return "question_detail";
}
this.answerService.create(question, answerForm.getContent());
return String.format("redirect:/question/detail/%s", id);
}
QuestionForm과 마찬가지로 @Valid 어노테이션과 BindingResult 객체를 사용해 검증을 진행한다.
3. question_detail.html 수정
question_detail에 댓글 입력에 오류가 발생하면 오류 메시지를 출력시킬 수 있도록 html파일을 수정한다.
<form th:action="@{|/answer/create/${question.id}|}" th:object="${answerForm}" method="post" class="my-3">
<div class="alert alert-danger" role="alert" th:if="${#fields.hasAnyErrors()}">
<div th:each="err : ${#fields.allErrors()}" th:text="${err}" />
</div>
<textarea th:field="*{content}" rows="10" class="form-control"></textarea>
<input type="submit" value="답변등록" class="btn btn-primary my-2">
</form>
4. QuestionController 수정
question_detail에서 AnswerForm 객체를 사용하기 때문에 QuestionController의 detail에서 AnswerForm으로 교체하여 준다.
@RequestMapping(value = "/detail/{id}")
public String detail(Model model, @PathVariable("id") Integer id, AnswerForm answerForm) {
Question question = this.questionService.getQuestion(id);
model.addAttribute("question", question);
return "question_detail";
}
결과화면
'Spring' 카테고리의 다른 글
[Spring]기능 - 네비게이션 바 (0) | 2022.08.17 |
---|---|
[Spring]Spring 시작해보기(14) - 에러메시지 출력 창 중복 제거 (0) | 2022.08.17 |
[Spring]Spring 시작해보기(12) - 질문 등록 버튼 및 폼 생성 (0) | 2022.08.16 |
[Spring]Spring 시작해보기(11) - Template 상속 (0) | 2022.08.16 |
[Spring]Spring 시작해보기(10) - BootStrap, Font 적용 (0) | 2022.08.16 |