본문 바로가기
Spring

Spring (@SessionAttribute,@ModelAttribute)

by 코딩하는아재냥 2022. 8. 19.

-@SessionAttribute에서 세션 영역에 저장한 값을 command객체에 setter 주입합니다.

@RequestParam

@SessionAttributes

HttpSession을 직접 사용할 수도 있지만

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

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

여러 화면에서 사용해야 하는 객체를 공유할 때 사용합니다.


 직접 사용해서 확인해보겠습니다.

예를 들어 수정 폼에서 수정(submit)을 누르고나면 updateBoard.do를 호출하게 되고

컨트롤러중에서 requestmapping("/updateBoard.do")가 이걸 처리해주게 되는데

현재 폼에서 수정했던 부분을 vo.setWriter(rs.getWriter("작성자")) 이런식으로 가져오지 않는 이상

request영역의 정보를 컨트롤러가 알수 없습니다.

하지만 @SessionAttribute를 이용하면 이 부분을 해결할수 있습니다.

 

글 수정하고나서 수정한 부분을 안할경우 지금은 null값으로 나오고 있습니다. 하지만

수정을 안해도 지금 적힌 값을 출력을 해줘야합니다.

하지만 다음과 같이 컨트롤러에 @SessionAttributes("board")를 넣어주고

getBoard.do에서 @ModelAttribute("board) 를 model.addAttribute("board",~~) 으로 값을 주입했기 때문에

model에서 board를 찾으면 ~~값을 찾게된다. 

@SessionAttibutes("board")를 적어줌으로서 model에 등록된 board를 찾아서 사용하고

실제 사용할 update에서는 vo객체 앞에 @ModelAttribute("board")를 적어줌으로써 컨트롤러에서도

값을 가져온 상태로 key 값인 "board"를 사용합니다.

사용할땐 지금처럼 @ModelAttribute("board")를 사용해야합니다.위에서 setter주입했기 때문에


@ModelAttribute 특징

 

@ModelAttribute("conditionMap")
   public Map<String,String> searchConditionMap(){
      Map<String, String> conditionMap = new HashMap<String,String>();
      conditionMap.put("제목", "TITLE");
      conditionMap.put("내용", "CONTENT");
      
      return conditionMap;
      
   }

 

댓글