event/update-form.html이 event/form.html 과 유사해서 fragments로 빼냈음!
모임 tab
<form class="needs-validation col-sm-10"
action="/study/algorithm/new-event/" method="post" novalidate="">
<input type="hidden" name="_csrf" value="c00a3a8d-e0aa-4f37-824b-e6cddbec3a0b">
action="/study/algorithm/new-event/"
<form class="needs-validation col-sm-10"
action="/study/algorithm/events/100/edit" method="post" novalidate="">
<input type="hidden" name="_csrf" value="c00a3a8d-e0aa-4f37-824b-e6cddbec3a0b">
action="/study/algorithm/events/100/edit", 모집 방법 form 은 숨김
fragments.html
<div class="form-group" th:if="${mode == 'new'}">
<label for="eventType">모집 방법</label>
mode == 'new' 일때만 모집 방법이 보이도록 함. 하지만 view에서 컨트롤 하는 것은 얼마든지 뚫고 값을 넣어줄 수 있다. 그럼 실제로 서버가 받아온다. EventForm이 받을 수 있기 때문!
EventController.java
@PostMapping("/events/{id}/edit")
public String updateEventSubmit(@CurrentAccount Account account, @PathVariable String path,
@PathVariable Long id, @Valid EventForm eventForm, Errors errors,
Model model) {
Study study = studyService.getStudyToUpdate(account, path);
Event event = eventRepository.findById(id).orElseThrow();
eventForm.setEventType(event.getEventType());
eventValidator.validateUpdateForm(eventForm, event, errors);
if (errors.hasErrors()) {
model.addAttribute(account);
model.addAttribute(study);
model.addAttribute(event);
return "event/update-form";
}
eventService.updateEvent(event, eventForm);
return "redirect:/study/" + study.getEncodedPath() + "/events/" + event.getId();
}
eventForm.setEventType(event.getEventType()); 을 통해서 해당 문제 해결, eventForm 에 들어온 eventType은 기존에 있던 event의 eventType으로 다시 덮어준다.
출처 : 인프런 백기선님의 스프링과 JPA 기반 웹 애플리케이션 개발