-
Spring MVC(폼 서블릿 오류 해결)웹개발/Spring 2020. 7. 28. 02:00
이 내용은 인프런의 스프링 웹 MVC강좌를 참고하여 만들었습니다.
똑같은 데이터를 요청을 하게 되면 그에 따른 메시지가 출력이 된다. 하지만 똑같은 데이터를 보내고 이를 데이터베이스나 혹은 다른 Repository에 저장을 해야 할 필요가 있다. 따라서 이는 Post/Redirect/Get 패턴으로 처리하여 문제를 해결할 수 있다.
Post요청으로 데이터를 보낸 다음 로직을 수행 한 후 Get요청을 redirect한후 로직을 수행하고 뷰를 매핑하면 해당 문제를 해결할 수 있다.
Event Class
public class Event { interface ValidateLimit{} interface ValidateName{} private Integer id; @NotBlank(groups = ValidateName.class) private String name; @Min(value = 0, groups = ValidateLimit.class) private Integer limit; public Integer getLimit() { return limit; } public void setLimit(Integer limit) { this.limit = limit; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
form.html
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Create New Event</title> </head> <body> <form action = "#" th:action="@{/events}" method="post" th:object="${event}"> <p th:if="${#fields.hasErrors('limit')}" th:errors="*{limit}">Incorrect date</p> <p th:if="${#fields.hasErrors('name')}" th:errors="*{name}">Incorrect date</p> <input type="text" title = "name" th:field="*{id}"/> <input type="text" title = "name" th:field="*{name}"/> <input type="text" title="limit" th:field="*{limit}"> <input type="submit" value="Create"/> </form> </body> </html>
list.html
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Create New Event</title> </head> <body> <a th:href="@{/events/form}">Create New Event</a> <div th:unless="${#lists.isEmpty(eventList)}"> <ul th:each="event: ${eventList}"> <p th:text="${event.Name}">Event Name</p> </ul> </div> </body> </html>
@Controller public class SampleController { @GetMapping("/events/form") public String eventsForm(Model model/*,HttpSession httpSession*/){ return "events/form"; } @PostMapping("/events") public String getEvent1(@Valid @ModelAttribute Event event, BindingResult bindingResult,Model model,SessionStatus sessionStatus) { if(bindingResult.hasErrors()){ return "events/form"; } List<Event> eventList = new ArrayList<>(); eventList.add(event); model.addAttribute(eventList); return "redirect:/events/list"; } @GetMapping("/events/list") public String getEvent2(Model model){ Event event = new Event(); event.setName("test"); List<Event> eventList = new ArrayList<>(); eventList.add(event); model.addAttribute(eventList); return "events/list"; } }
1, "/events/form"을 통하여 from.html로 이동
2, "/event"매핑이 되면서 post요청이 수행이 됨
3, redirect로 "/events/list"매핑이 일어나면서 로직이 수행이 되고 list.html이 수행이 된다.
(따라서, 새로고침을 눌렀을 시 경고 메세지가 띄워지는 오류를 해결)
'웹개발 > Spring' 카테고리의 다른 글
Spring MVC(RedirectAttribute) (0) 2020.07.30 Spring MVC(세션 관리) (0) 2020.07.28 Spring MVC(@ModelAttribute, @Valid, @Validated) (0) 2020.07.28 Spring MVC(html과의 매핑) (0) 2020.07.28 Spring MVC(요청 매개변수) (0) 2020.07.26