<form>
태그에서 th:action="URL경로"를 지정하지 않은 경우
- <form>
의 th:action 속성값은 주소창의 URL 경로가 된다.
💡 예시
1. html
<form class="border bg-light p-3" method="post" th:object="${postForm}">
<div class="form-group mb-3">
<label class="form-label">제목</label>
<input type="text" th:field="*{title}" class="form-control" />
<div th:errors="*{title}" class="text-danger"></div>
</div>
<div class="form-group mb-3">
<label class="form-label">내용</label>
<textarea rows="5" th:field="*{content}" class="form-control"></textarea>
<div th:errors="*{content}" class="text-danger"></div>
</div>
<div class="text-end">
<button type="submit" class="btn btn-primary">등록하기</button>
</div>
</form>
2. Controller
1) 새 게시글 등록
- 등록화면 요청 : GET방식, /post/create
- 등록 요청 : POST방식
@PreAuthorize("isAuthenticated()")
@GetMapping("/create")
public String form(Model model) {
model.addAttribute("postForm", new PostForm());
return "post/form";
}
@PreAuthorize("isAuthenticated()")
@PostMapping("/create")
public String create(@Valid PostForm postForm, BindingResult errors, Principal principal) {
if (errors.hasErrors()) {
return "post/form";
}
postService.createPost(postForm, principal.getName());
return "redirect:/post/list";
}
2) 게시글 수정
- 수정화면 요청 : GET방식, /post/modify/1001
- 수정 요청 : POST방식
@PreAuthorize("isAuthenticated()")
@GetMapping("/modify/{id}")
public String form(@PathVariable("id") Long id, Principal principal, Model model) {
Post post = postService.getPostDetail(id);
if (!post.getUser().getUsername().equals(principal.getName())) {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "다른 작성자의 게시글은 수정할 수 없습니다.");
}
PostForm postForm = new PostForm();
postForm.setTitle(post.getTitle());
postForm.setContent(post.getContent());
model.addAttribute("postForm", postForm);
return "post/form";
}
@PreAuthorize("isAuthenticated()")
@PostMapping("/modify/{id}")
public String modify(@PathVariable("id") Long id, @Valid PostForm postForm, BindingResult errors, Principal principal) {
if (errors.hasErrors()) {
return "post/form";
}
Post post = postService.getPostDetail(id);
if (!post.getUser().getUsername().equals(principal.getName())) {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "다른 작성자의 게시글은 수정할 수 없습니다.");
}
postService.updatePost(postForm, post);
return String.format("redirect:/post/detail?id=%d", id);
}