ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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
Designed by Tistory.