2013-11-26 6 views
1

JSF 1.2 응용 프로그램에서 세션 범위 Managed Bean을 하위 클래스로 대체 할 수 있습니까?하위 클래스가있는 세션 범위 Managed Bean을 재정의

클래스 구조

내가 가지고 세션 범위 콩, MainViewMB, 그 서브 클래스, RestrictedViewMB 관리 :

UML: <<ManagedBean>> MainViewMB extended by RestrictedViewMB

얼굴-config.xml 파일을

<managed-bean> 
    <managed-bean-name>mainViewMB</managed-bean-name> 
    <managed-bean-class>com.example.MainViewMB</managed-bean-class> 
    <managed-bean-scope>session</managed-bean-scope> 
</managed-bean> 

문제 문

EL 표현식 #{mainViewMB}MainViewMB의 인스턴스를 반환합니다.

#{mainViewMB} 인스턴스를 RestrictedViewMB으로 리 바인드하여 EL 표현식 #{mainViewMB}이 나머지 세션에 대한 서브 클래스 인스턴스를 리턴하도록합니다.

내 목표를 달성하는 방법이 있습니까?

MainViewMB

동기 부여의 예는 응용 프로그램의 메인 페이지 뒤에 GUI 로직을 처리합니다. 사용자가 특수 목적 로그인 페이지에서 응용 프로그램을 입력하면 주 페이지의 제한된 단순보기를 제공해야합니다. 하위 클래스에서 MainViewMB의 속성 중 일부를 재정의하는 것이 분명한 해결책으로 보입니다.

답변

2

할 수 있거나 할 필요가있는 순간 수동으로하십시오.

externalContext.getSessionMap().put("mainViewMB", new RestrictedViewMB()); 

이 효과적으로은 세션 빈을 관리의 범주가 지정된 만들기, 이름 mainViewMB으로 세션 범위에 RestrictedViewMB의 새로운 인스턴스를 넣습니다.

관리되는 속성과 @PostConstruct/@PreDestroy을이 경우에만 호출하면되며 수동으로해야합니다.

+0

'# {mainViewMB} '이 (가) 작동합니까? EL에서 작동하게하려면 다른 조치가 필요합니까? –

+3

예, 그렇지 않은 경우이 대답은 무의미했습니다. 아니요, JSF 관리 빈을 포함하여 기존 세션 속성을 완전히 오버라이드합니다. JSF가 빈을 생성하고 관리하는 방법을 이해하고 있습니까? JSF는 세션 범위의 관리 Bean을 관리 Bean 이름을 키로 사용하여 세션 맵에 정확히 동일한 방식으로 배치합니다. 이제 JSF의 작업을 반복했지만 다른 인스턴스를 사용하고 있습니다. – BalusC

+0

예, 아니오. EJB 의존성 주입이 어떻게 작동하는지 이해하고 있으며, JSP/Servlet 웹 애플리케이션 범위를 이해하고 있지만, JSF에 대한 나의 이해에는 몇 가지 차이가 ​​있습니다. –

관련 문제