728x90
반응형
SMALL
답변 등록 기능에 폼 적용하기
앞서 질문 등록 폼에 했던 것처럼 답변 등록 폼에도 적용해보자.
아래 링크 참고
[Spring Boot] 16. 폼(Form) 활용하기(1)
만약 질문을 등록할 때 질문 내요을 비어 있는 값으로도 등록할 수 있다.하지만 이건 옳지 않는 방법이므로 아무것도 입력하지 않은 상태에서 질문이 등록될 수 없도록 해야한다.따라서 폼 클래
exuzii.tistory.com
/answer/AnswerForm.java
먼저 답변 폼 클래스 작성해보자.
package com.mysite.sbb.answer;
import jakarta.validation.constraints.NotEmpty;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class AnswerForm {
@NotEmpty(message = "내용은 필수 항목입니다.")
private String content;
}
/answer/AnswerController.java
답변을 작성할 때 PostMapping된 메서드에서 바인딩 될 수 있도록 컨트롤러를 수정하자.
...
@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);
}
...
/templates/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>
</div>
<textarea th:field="*{content}" rows="10" class="form-control"></textarea>
<input type="submit" value="답변등록" class="btn btn-primary my-2">
</form>
...
답변 등록 form의 입력 항목과 AnswerForm을 타임리프에 연결하기 위해 th:object 속성을 추가했다.
또 content 항목도 th:field 속성을 사용하도록 수정했다.
이제 답변을 작성하고 등록할 때 AnswerForm을 사용하기 위해 템플릿도 수정했으므로
QuestionController의 detail메서드도 수정해야 한다.
/qeustion/QuestionController.java
@GetMapping(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";
}
결과 테스트


728x90
반응형
LIST
'IT > Spring Boot' 카테고리의 다른 글
[Spring Boot] 19. 네비게이션 바(Nav bar) 추가하기 (0) | 2024.05.02 |
---|---|
[Spring Boot] 18. 공통 템플릿 만들기 (0) | 2024.04.30 |
[Spring Boot] 16. 폼(Form) 활용하기(1) (0) | 2024.04.30 |
[Spring Boot] 15. 질문 등록 기능 추가하기 (0) | 2024.04.30 |
[Spring Boot] 14. 표준 HTML 구조로 변경 (0) | 2024.04.11 |