봄싹2009.10.26 19:26

@Controller
@SessionAttributes("meeting")
public class MeetingController {

public String meetingView(@PathVariable int meetingId, Model model) {
}
}

이렇게 해주면.. 
model.getAttribuite("meeting") 해주면 . meeting 객체가 들어가 있다.. 

이걸 해주는 코드는 .. 

HandlerMethodInvoker 이라는 .. 놈의 129 line ~ 134 line 까지...
for (String attrName : this.methodResolver.getActualSessionAttributeNames()) {
Object attrValue = this.sessionAttributeStore.retrieveAttribute(webRequest, attrName);
if (attrValue != null) {
implicitModel.addAttribute(attrName, attrValue);
}
}

이부분이다 .. 

대충 말하자면 .. SessionAttributes 여기에 담긴 놈들은 SessionAttributeStore 에 올라가있고 .. 
implicitModel 이놈 즉.. 기본적인 Mode( BindingAwareModelMap) 이놈한테 put 해준다. 

결론 부터 이야기 하자면... SessionAttributes 담은 객체는 SessionStatus의 setComplete()를 호출 해주기 전까지.. 계속 담긴다.. ;; 
봄싹의 문제점은.. json string을 만들때.. model로 왕창 다 넘겨 주는데.. 
SessionAttributes  담겨 잇는 ob 까지 만들면서 .. 불필요한 스트링 포함... 하이버네이트 Persistent 상태인 object 까지..(JackJson lib 를 이용하면 문제는 없다..) json 스트링으로 만들려다가.. 별의 별 예외를 다 낸다.. ;; 

해결책은 간단히 생각하면... 그냥 model을 지우고 시작하면 된다.. 
그런데 그건 맘에 들지 않으니.. 간지나는 방법이 어디 없을까나;; 흠냥;; ~~ 

Posted by is윤군

댓글을 달아 주세요

  1. 저부분을 고쳐서 세션에 있는 객체를 담지 않고록 만들고, WithoutSessionHandlerMathodInvoker를 만드는건 어떨까나.

    2009.10.26 23:32 [ ADDR : EDIT/ DEL : REPLY ]
    • 문제는... 세션말고도 커맨드 객체도 넣어준다는거~ ㅎ 지금 생각은~ 기존 MappingJacksonJsonView 요놈을 좀 수정해주는걸로 ..ㅎ

      2009.10.27 09:06 신고 [ ADDR : EDIT/ DEL ]