ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 핸들러 메소드 8부: @SessionAttributes
    SPRING/스프링 MVC 2021. 7. 4. 13:06

    @SessionAttributes : 모델 정보를 HTTP 세션에 저장해주는 애노테이션

     

    - HttpSession을 직접 사용할 수도 있음 

    - 이 애노테이션에 설정한 이름에 해당하는 모델 정보를 자동으로 세션에 넣어준다. 

    - @ModelAttribute는 세션에 있는 데이터도 바인딩한다. 

    - 여러 화면(또는 요청)에서 사용해야 하는 객체를 공유할 때 사용한다. 

       예시 : 첫번째 form에서 입력한 개인정보, 두번째 form에서 입력한 주소정보, 세번째 form에서 입력한 기타정보 등
               다음 form 으로 가기 전에, 이미 입력한 정보를 세션에 담아둔다.

     

    SessionStatus를 사용해서 세션 처리 완료를 알려줄 수 있다. 

    - sessionStatus.setComplete() : 폼 처리 끝나고 세션을 비울 때 사용한다.

     

    @Controller
    @SessionAttributes("event")
    public class SampleController2 {
    
        // Form 화면
        @GetMapping("/events/form")
        public String eventsForm(Model model, HttpSession httpSession) {
            Event newEvent = new Event();
            newEvent.setLimit(50);
            model.addAttribute("event",newEvent);
            // HttpSession을 이용하는 경우
            // httpSession.setAttribute("event",newEvent);
            return "/events/form";
        }
    
    
        // form 전송
        @PostMapping("/events")
        public String createEvent(@ModelAttribute @Validated Event event,
                              BindingResult bindingResult, Model model,
                              SessionStatus sessionStatus) {
    
            // @Validated 어노테이션을 통하여 Validation 체크에 맞지 않으면 다시 form으로 리턴
            if(bindingResult.hasErrors()) {
                return "/events/form";
            }
    
            List<Event> eventList = new ArrayList<>();
            eventList.add(event);
            model.addAttribute("eventList",eventList);
            // save 생략
    
    
            // DB 저장
    
            sessionStatus.setComplete(); // form 처리가 끝났을 때 세션을 모두 비우도록 처리
    
            // POST-REDIRECT-GET 패턴
            // ( Post 이후에 브라우저를 리프래시 하더라도 폼 서브밋이 발생하지 않도록 하는 패턴)
            return "redirect:/events/list";
        }
    
        @GetMapping("/events/list")
        public String getEvents(Model model) {
    
            // 리스트를 불러오는 부분
            Event event = new Event();
            event.setName("spring");
            event.setLimit(10);
    
            List<Event> eventList = new ArrayList<>();
            eventList.add(event);
    
            model.addAttribute(eventList);
            return "/events/list";
        }
        
    }
    

     

Designed by Tistory.