에서 발췌 BalusC's Communication in JSF 2.0
• @ ViewScoped : 브라우저 창/탭에 같은 JSF 뷰와 상호 작용하고로이 범위에서 콩만큼 살고있다. HTTP 요청에 따라 만들어지며 다른보기로 다시 게시하면 파기됩니다. GET 요청으로 뷰를 닫거나 닫을 때 즉시 파괴되지는 않지만 더 이상 일반적인 방법으로는 액세스 할 수 없습니다. JSF는 UIViewRoot # getViewMap()에 Bean을 관리 Bean 이름과 함께 키로 저장합니다.이 Bean 이름은 세션에 저장됩니다. 빈을 유지하려면 작업 (리스너) 메소드에서 null 또는 void를 리턴해야합니다. 동일한 브라우저 창/탭 (보기) 내의 후속 요청에서 상태를 유지해야하는 ajax, 데이터 테이블 및/또는 여러 렌더링 된/비활성화 된 속성을 사용하는보다 복잡한 양식에이 범위를 사용합니다.
@ SessionScoped :이 범위에있는 bean은 HTTP 세션이 존재하는 한 계속 존재합니다. 세션에서이 Bean과 관련된 첫 x 째 HTTP 요청시 생성되고 HTTP 세션이 + 효화 될 때 (또는 세션 맵에서 Bean을 수동으로 제거 할 때) 파기됩니다. JSF는 Bean을 관리 Bean 이름을 키로 사용하여 HttpSession의 속성으로 저장합니다. ExternalContext # getSessionMap()에서도 사용할 수 있습니다. 동일한 세션 내 모든 브라우저 창/탭 (보기)간에 안전하게 공유 할 수있는 순수 세션 범위 데이터에이 범위를 사용하십시오. 예를 들어, 로그인 한 사용자 등 사용자 별 설정 및 선택된 언어/로케일로 사용자 선호
ViewScoped
콩 차례로 사용자 세션에 저장된 UIViewRoot에 저장된
, 따라서 콩은 간접적으로 세션에도 저장됩니다. 세션이 만료되고 파괴 된 후에도
ViewScoped
빈이 파괴되고 상태를 예상하는 LoginBean의 코드에서 참조하는 경우 또는 상태 (예 : a4j)가 필요한 타사 구성 요소를 사용중인 경우, 그때 그것은 wierdness를 설명 할 수 있습니다.
귀하의 LoginBean에 대해 RequestScoped
으로 전환하는 것이 좋습니다. 나는 어플 리케이션에 로깅하기 위해 ViewScoped
backing beans가 필요한 상황을 경험하지 못했다.
"a4j"라고 말하면 RichFaces의 ''구성 요소를 의미합니까? –
BalusC
@BalusC >> 예. – user1201055