문제

좀 자세히 설명하겠습니다.Jsf는 디자이너 입장에서 작업하기에는 다소 고통스럽습니다. 손을 묶은 채 그림을 그리는 범위에 있지만 양식을 씹고 많은 데이터를 나열하는 데는 좋습니다.그래서 우리 회사에서 만들고 있는 사이트는 jsf 관리자 페이지와 jsp 사용자 페이지입니다.사용자 페이지에 복잡한 형식과 내용이 있고 jsf가 시작될 때 문제가 발생합니다.

질문은 다음과 같습니다.나는 순수한 JSP 페이지에 있습니다.Session Bean을 사용하는 일부 JSF 페이지에 액세스해야 합니다.해당 Bean을 어떻게 초기화할 수 있나요?jsf 페이지에 있었다면 데이터를 준비하는 commandLink가 있을 수 있었습니다.내가 생각해 낼 수 있는 유일한 것은 작업을 수행하고 나를 필요한 jsf 페이지로 리디렉션하는 더미 jsf 페이지를 갖는 것입니다. 그러나 그것은 다소 추악하며 50개의 더미 페이지로 끝나고 싶지 않습니다.나는 원하는 매개변수와 함께 이미 세션에 있는 Bean을 다시 초기화하는 메커니즘을 찾고 싶습니다.

편집하다:좀 더 자세한 내용.이 특정 상황에서는 전체 테스트 또는 필터링된 테스트가 있습니다.테스트가 필터링된 경우 답변에 따라 일부 질문을 제거해야 한다는 점을 제외하면 동일한 논리와 모든 것을 갖춘 동일한 테스트입니다.링크를 클릭하면 두 가지 모드 중 하나에서 요청된 테스트가 시작됩니다.링크는 기본 메뉴 트리의 일부이며 많은 형제 JSP 페이지에서 볼 수 있습니다.내 임무는 4개의 링크를 갖는 것입니다:testA 전체, testA 필터링, testB 전체, testB 필터링, 동일한 jsf 페이지 및 TestFormBean의 모든 리드가 이에 따라 다시 초기화되어야 합니다.

편집하다:나는 페이스렛을 조금 조사했고 지금은 도움이 되지 않지만 다음 프로젝트에서 이를 명심하겠습니다.

도움이 되었습니까?

해결책

이 문제를 해결하려면 아마도 양식만 포함하는 JSF 조각을 만든 다음 <c:import> 태그를 사용하여 내 JSF 페이지에 포함시킵니다.

하지만 해당 솔루션은 환경에 따라 약간 취약할 수 있습니다.

편집하다:Chris Hall의 답변을 참조하세요. FacesContext 외부에서는 이용이 불가능합니다 FacesServlet.

다른 팁

페이스렛 사용을 살펴보셨나요?이는 전체 JSF/JSP 차이점을 제거할 수 있게 해줍니다(대체적이고 우수한 뷰 컨트롤러입니다).

또한 jsfc 태그를 사용하여 뛰어난 디자인 타임 의미 체계를 지원합니다...

<input type="text" jsfc="#{SomeBean.property}" class="foo" />

내부적으로 올바른 JSF 항목으로 변환되므로 기존 도구로 작업할 수 있습니다.

다음과 같은 방법을 사용하여 태그 라이브러리 내부에서 관리되는 Bean을 검색할 수 있습니다.

FacesContext context = FacesContext.getCurrentInstance();
Object myBean = context.getELContext().getELResolver().getValue(context.getELContext(), null, "myBeanName");

그러나 JSF 페이지 중 하나에서 태그 라이브러리를 사용해야 합니다.FacesContext.getCurrentInstance()는 FacesServlet 외부에서 호출될 때 null을 반환합니다.

실제로 세션에서 Bean을 제거하여 이 문제를 해결했기 때문에 jsf 페이지가 호출될 때 다시 생성해야 합니다.그런 다음 생성자의 요청에서 매개변수를 가져옵니다.

사용자 정의 JSP 태그 핸들러를 만듭니다.그런 다음 세션 범위에서 Bean을 검색한 다음 즉시 초기화할 수 있습니다.이것 좀 봐 지도 시간 상세 사항은.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top