2010-12-06 5 views
1

웹 페이지에 2 개의 링크가 있고 appserver /? dept = 1에 1 개의 링크를 연결하고, 링크 2는 appserver /? dept = 2입니다. 그런 다음 JSF 위상 리스너를 가지고 거기에 백엔드 bean을 가져다가 dept1 또는 dept2를 bean 매개 변수로 설정하여 다른 부서 내용을 렌더링 할 수 있습니다. 사용자가 위 웹 페이지에서 2 개의 창을 시작하면 dept1 창의 내용은 dept2 창으로 갈 수 있습니다. 모두 망 쳤어. (브라우저에서 바탕 화면 바로 가기를 시작하면 위의 링크를 입력해도 아무런 문제가 없습니다. 2 세션이 만들어지기 때문에 두 가지 백엔드 빈 인스턴스가 생성됩니다.)JSF 1.x에서 뷰 범위 Bean을 작성하는 방법은 무엇입니까?

핵심 이유는 JSF store back 빈이 세션에 있으므로 동일한 부모 창에서 동일한 세션 ID (쿠키)를 공유하는 두 개의 창은 동일한 백엔드 빈 클래스 인스턴스를 사용했습니다. 렌더링 결과 시간에 결과는 어느 창 으로든 갈 수 있습니다.

이 창 교차 콘텐츠 상황을 어떻게 피할 수 있습니까? 이것은 오래 전에 해결되어야하는 근본적인 웹 앱 문제로 보인다. 아니면 내가 일을 정말로 잘못했을 수도 있습니다.

나는 이음선 변환을 시도하지 않았다. JSF2.0에는 뷰 범위, CDO가있다. 복용량 도움이 될까요? 아직 여러 가지 이유로 JSF2.0으로 이동할 수 없습니다. JAVA6, Tomcat6.20, Icefaces를 사용하고 있습니다. 어떤 도움도 충당됩니다.

답변

1

JSF 1.x에서 가장 좋은 방법은 Tomahawk's<t:saveState>입니다. 지정된 요청 범위 Bean이 브라우저 탭/창에 관계없이 바로 동일한 페이지에 의해 실행되는 후속 요청에서 유지되는 페이지에 넣기 만하면됩니다.

<t:saveState value="#{bean}" /> 

JSF 2.0 뷰 범위와 같은 역할을합니다.

+0

감사합니다. 나는 한 번 시험해 볼 것이다. 또한 나는 다른 URL을 사용하도록 링크 페이지를 변경할 수 있다고 생각했는데 (각 앱 서버마다 각 부서마다 다른 서블릿이 있음), 각 창마다 서로 다른 URL을 치기 때문에 다른 세션을 만들 수 있습니다. 그러나 사용자가 동일한 부서에서 여러 창을 열면 문제가 계속 발생할 수 있습니다. – Charles

+0

BalusC, 제안 작품. 그리고 이것이 가장 방해가되지 않는 가장 간단한 해결책이라고 생각합니다. 1 시간 안에 작동 해. 다른 사람들을위한 경험을 공유하기 위해서 : 1. 빈 범위를 요청으로 정의해야합니다. 2. 빈 코드를 직렬화 가능으로 만드십시오. 3. common-el-1.0.jar common-fileupload-1.2.1 jar, 다운로드 한 Tomahawk lib의 commons-io-1.3.2.jar tomahawk12-1.1.10.jar를 사용했습니다. – Charles

+0

당신을 진심으로 환영합니다. 가장 도움이되는 답을 표시하는 것을 잊지 마십시오. http://stackoverflow.com/faq를 참조하십시오. – BalusC

0

문제는 쉽게 이음 대화를 사용하여 해결할 수 있으며, 이음새 패키지와 함께 제공되는 예제를 볼 수 있습니다. 백킹 빈 범위를 세션에서 대화로 변경하고 페이지 매개 변수를 사용해야합니다. 또한 액션 북의 솔기는이 사용 사례를 아주 훌륭하고 간단한 예제로 설명합니다.

+0

그래, 나도 그렇게 생각했다. 나는 솔기 다운로드 예제를 시도했다. 단 하나의 예제 만 Jboss plubin없이 일반 Tomcat에서 실행할 수있다. 하지만 여전히 문제가 있습니다. pages.xml, 주석 (@converstion 범위, @Begin 등)을 추가하지 않았습니다. 제가 말씀 드렸듯이 "실연의 솔기"책 예제를 살펴볼 것입니다. 감사. – Charles

0

MyFaces Orchestra을 살펴보십시오.

+0

예. 그러나 오케스트라는 여러분이 아직 조직에서 사용하지 않은 Spring을 설치해야합니다. – Charles