-
핸들러 메소드 8부: @SessionAttributesSPRING/스프링 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"; } }
'SPRING > 스프링 MVC' 카테고리의 다른 글
핸들러 메소드 10부: @SessionAttribute (0) 2021.07.05 핸들러 메소드 9부 멀티 폼 서브밋 (0) 2021.07.05 핸들러 메소드 7부: 폼 서브밋 (에러 처리) (0) 2021.07.04 핸들러 메소드 6부: @Validated (0) 2021.07.03 핸들러 메소드 5부: @ModelAttribute (0) 2021.07.03