2011-12-09 5 views
1

각 세션 빈과 연관된 여러 개의 menulink가 있습니다. 콩이 세션에 있기 때문에 다른 메뉴 링크 사이를 이동할 때 값이 유지됩니다. 예를 들어 고객 프로필과 계정 세부 정보라는 두 개의 메뉴 링크가 있다고 가정합니다. 고객 프로필에서 이름과 성을 입력하여 고객의 세부 정보를 검색 할 수 있습니다. 계정 세부 정보 페이지에서 고객 계정 번호를 입력하여 고객 계정의 세부 정보를 가져올 수 있습니다. 이 경우 사용자가 잘못된 계정 번호를 입력하면 유효성 검사 오류가 표시되고 사용자가 입력 한 고객 계정 번호가 화면에 유지됩니다. 사용자가 고객 프로필 링크로 이동하여 계정 세부 사항 화면으로 돌아 오면 이전에 입력 한 계정 번호가 세션 범위이므로 그대로 표시됩니다.JSF - 세션 범위에있는 관리 빈의 값 지우기

이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 사용자가 다른 메뉴 링크로 이동할 때

  1. 나는 세션에서 콩을 제거하는 PhaseListenerbeforePhase에서 몇 가지 코드를 가질 수 있습니까?
  2. 관련 메뉴 링크를 클릭 할 때마다 세션 빈에서 변수를 정리하기 위해 호출 할 수있는 일종의 초기화 블록을 사용해야합니까?

이 시나리오를 처리하는 모범 사례가 있습니까?

답변

2

요청한 범위의 데이터를 세션 범위 Bean에 저장하거나 볼 수 없습니다. 요청 또는 뷰 범위에 빈을 대신 넣으십시오. RichFaces가있는 JSF1의 새로운 JSF2 뷰 범위는 요청 범위 Bean을 참조하는 <a4j:keepAlive>을 뷰에 추가하여 얻을 수 있습니다.

+0

안녕하세요 BalusC, 전체 응용 프로그램에 세션 범위 콩이 있습니다. 를 사용하여보기 범위를 지정하는 데 많은 노력이 필요합니까? 응용 프로그램은 현재 많은 아약스 기능을 사용하지 않습니다. 응용 프로그램에서 Ajax 관련 태그를 사용하여 뷰 범위로 변환해야합니까? –

+0

글쎄, 처음부터 응용 프로그램이 제대로 설계되지 않았다면 도움을 줄 수 없습니다. 아뇨, 아약스 능력은 필수는 아닙니다. – BalusC

+0

감사합니다. BalusC - 항상 유용한 팁. 세션 범위에서 언제 관리 Bean을 사용해야합니까? 어떤 예가 있습니까? –

1

옵션 2를 사용하고 있습니다. 즉, 해당 링크를 클릭하면 관리 빈이 "재설정"됩니다.

그러나 필요한 항목을 제공 할 수있는 더 많은 범위 (예 : 대화 범위)가 있으므로 Seam Faces을 보길 원할 수 있습니다.

+0

감사합니다. Thomas. 주로 Rich Faces를 사용하고 있습니다. Seam Faces에서 제공하는 옵션을 살펴볼 것입니다. 옵션 1을 사용하는 것은 나쁜 습관입니까? 옵션 1에 문제가 있습니까? –

+1

@ user1042646 글쎄, 난 그걸 확인하지 못했지만 과잉 일 수도있는 세션의 모든 콩을 거쳐야 할 수도 있습니다. 또한 사용자 브라우저 계정 세부 사항 등이있는 동안 값을 지우고 싶지 않기 때문에 사용자가 현재 브라우징하고있는 컨텍스트를 점검 할 수 있습니다. 이러한 컨텍스트 내에서 브라우징이없는 경우 요청에 해당 값을 넣는 것을 고려할 수 있습니다 범위가 지정된 bean. – Thomas

+0

이 경우 내가하고있는 일은 각 menulinks에 "menuLink"속성을 추가했습니다. phaseListener에서, 나는 menuLink 속성을 검사하고 세션에서 특정 빈을 제거한다. 매개 변수가 전달되지 않기 때문에 대화 중간에 값이 제거되지 않습니다. 양식 재설정의 경우, 양식 재설정 메소드를 호출해야하는 위치는 어디입니까? phaselistener 안에 있어야하나요? –