2011-08-30 3 views
1

포털 애플리케이션의 PortletRequest에서 특정 정보를 가져와야합니다. 포틀릿 애플리케이션 내에서 유틸리티 메소드를 사용하여이를 수행합니다. 이 유틸리티 메소드에서는 FacesContext.getCurrentInstance().getRequest()에 액세스하여 PortletRequest를 가져옵니다. DAO 레이어에서이 유틸리티 메서드에 액세스합니다. 요청 매개 변수에 대한 액세스 권한이 없습니다. 때때로 작동하지만 때로는 나에게 NullPointerException을줍니다. 나는 이것에 대해 설명하는 유사한 thread을 발견했다. 그들은 동일한 요청의 일부인 경우 언급 했었습니다. 그런 다음 컨텍스트를 가져와야합니다. 나에게 그것은 같은 요청의 일부이지만 컨텍스트를 얻지는 못한다. 저를 도와주세요.포털 애플리케이션에서 FacesContext에 액세스

답변

0

FacesContext.getCurrentInstance()에서 null FaceContext를 얻는 경우이 스레드/요청에 대해 FacesContext가 생성되지 않았습니다.

실패한 요청이 비 얼굴 입력 점을 통과합니까? 이벤트 또는 자원 포틀릿 요청과 같은 그 경우는, FacesContext는 작성되지 않습니다.

정적 메서드와 스레드 로컬 저장소를 사용하여 DAO의 데이터에 액세스하는 대신 PortletRequest에서 필요한 것을 추출하여 스택으로 전달하는 것이 좋습니다. FaceContext 또는 PortletRequest 같은 프리젠 테이션 레이어 인공물을 DAO 레이어와 혼합하는 것은 나쁜 습관입니다.

0

응용 프로그램이 별도의 WAR/JAR 파일에 배포 된 경우 다른 클래스 로더가 사용되는 것일 수 있습니다. JBossS5에서 최대 절전 모드 HAR 아카이브 내부에서 FacesContext에 액세스하려고했을 때 비슷한 문제가 발생했습니다. 리플렉션 API를 사용하여 성공적인 솔루션을 찾았습니다. this을 살펴보십시오.

전체 응용 프로그램을 하나의 EAR로 묶으면 전체 귀에 대해 하나의 클래스 로더를 사용하도록 할 수 있지만 응용 프로그램 서버마다 AFAIK를 사용할 수는 있습니다.

감사합니다.