2013-07-04 2 views
0

의 내가 고객 변수를 만들라고하여 내 sesssion에 넣어 보자 :동일한 이름으로 세션을 다시 넣으면 새 세션 변수가 자동으로 이전 세션 변수로 바뀝니 까?

FacesContext.getCurrentInstance().getExternalContext() 
    .getSessionMap().put("currentUser", currentUser); 

그런 다음, 우리가 내가이 개체에 대한 몇 가지 변경을 가정 해 봅시다. 내가 먼저 다음과 같은 방법으로 거기에 일부 내용을 변경, 세션에서 고객 개체를 얻을 : 내가 예전과 같은 이름을 가진 세션이 새로운 고객 객체를 넣어 경우,

//Do the changes, set username again etc. 
Customer currentCustomer = (Customer)FacesContext.getCurrentInstance() 
    .getExternalContext().getSessionMap().get("currentCustomer"); 

다음에,이다 이전과 교체 되셨나요?

FacesContext.getCurrentInstance().getExternalContext() 
    .getSessionMap().put("currentCustomer", currentCustomer); 

내가 말은,이 세션에 "currentCustomer"라는 변수를 넣어했다, 나는 그것을 갱신과에 다시 넣어 : 나는 그 객체를 업데이트 한 후 코드를 다음 작성하는 경우, 업데이트 된 세션 변수는, 의미 동일한 이름의 "currentCustomer"세션. 이 경우 어떻게됩니까? 그것은 자동적으로 오래된 것으로 대체됩니까? 왜냐하면 우리는 동일한 이름을 가진 두 개의 다른 객체를 세션에 넣을 수 없다고 생각하기 때문입니까? currentCustomer가 같은 개체 인스턴스이기 때문에

+1

, 내가 먼저 ** 왜 ** 당신은'SessionScoped' @ 관리 Bean을 수동으로 세션에서 뭔가를 저장하는 대신 사용해야합니다 요청할 것입니다. 세 사람이 이미 문제에 대한 답을주고 있지만 디자인 문제가있는 것처럼 보입니다. –

+1

귀하의 질문은 전면에 있습니다. * old * 값은 * new * 값으로 대체됩니다. – EJP

답변

0

당신은 세 번째 단계를 수행 할 필요가 없습니다. 즉, 두 번째 단계 후에 get (key)를 사용하여 꺼내는 인스턴스 인 currentCustomer 인스턴스가 맵에 남아 있습니다. 인스턴스를 가져 와서 값을 변경하면 맵에 모든 변경 사항이 적용됩니다. 여전히 같은 경우.

어떻게 든 다음 예는 풋 ("currentCustomer", currentCustomer을) 할 필요가 currentCustomer의 다른 인스턴스를 사용해야하는 경우; 다시지도에. 귀하의 질문에 대해서는

+0

아 내가 그런데 –

+0

감사를 편집하고 변경을 먼저 질문에 새로운 객체를 생성 맞아 –

0

, 예. 값은 java.util.Map이므로 값을 저장하고 키와 연결하므로 값이 새 값으로 바뀝니다.

는만큼 키가 "currentCustomer" 한, 모든 개체가 여기에 연관 될 수 있습니다. 이 코드는 JSF 응용 프로그램에 관련되어 있기 때문에

관련 문제