2014-04-11 8 views
2

JSF 2.2의 @ManagedBean(eager=true) 주석을 대체 할 솔루션을 찾고 있습니다.JSF22의 @ManagedBean (eager = true) 대체하기

나는 애플리케이션 시작시 코드 실행을 허용하는 제안서 such as을 잘 기록했다.

그러나 FacesContext에 액세스해야하므로이 해결책이 작동하지 않습니다. FacesContext.getCurrentInstance()은 현재 null입니다.

SPI에서 AfterDeploymentValidation의 대안을 찾으려고했지만 아무 것도 발견되지 않았습니다.

DeltaSpike의 개발자는 @ManagedBean(eager=true)으로 대체를 구현하지 않으며 OmiFaces는 아직 이러한 종류의 솔루션을 지원하지 않으므로 see입니다. 나는 병 속에 메시지를 보내고있다.

당분간은 콩에 액세스하고 @Named으로 변환합니다. 내 webapp의 일반적인 xhtml 헤더에서 볼 수 있지만 일종의 추한 것입니다.

답변

4

DeltaSpike와 JSF 응용 프로그램에 대한 가장 좋은 해결책은은 다음과 같다 :

@ApplicationScoped 
public class MyBean 
{ 
    public void init(@Observes PostConstructApplicationEvent event) 
    { 
     // init here 
    } 
} 
+0

안녕하세요 토마스 :

import javax.enterprise.context.ApplicationScoped; import javax.inject.Named; import org.omnifaces.cdi.Eager; @Named @Eager @ApplicationScoped public class Bean { // ... } 

또는 @Eager @ApplicationScoped에 대한 고정 관념이 @Startup

. 제안 해 주셔서 감사하지만 작동하지 않습니다. 이 메서드는 DeltaSpike 버전 0.6 및 0.7을 사용하여 호출되지 않습니다 .- SNAPSHOT –

+0

사실, 작동합니다. 내 문제의 일부는 web.xml에서 잘못된 서블릿 버전이 사용되었다는 것입니다. 다시 Thx! –

+0

충분하지 않은 다른 사용 사례를 발견했습니다. @Observes PostConstructApplicationEvent를 사용할 때 init 호출은 web.xml에 구성된 필터링 된 여러 가지로 묶이지 않습니다. 그래서, 어떤 경우에는 필요한 모든 것들이 수행되지 않습니다 ... –

3

1.8 OmniFaces 때문에,이뿐만 아니라 @Named @ApplicationScoped에서 작동 호환되는 CDI @Eager하지만 CDI의 @SessionScoped@RequestScoped 및 OmniFaces @ViewScoped을에 루게릭 병 . blog entryshowcase example도 참조하십시오.

당신은 @Eager @ApplicationScoped으로 하나를 사용할 수 있습니다

import javax.inject.Named; 
import org.omnifaces.cdi.Startup; 

@Named 
@Startup 
public class Bean { 
    // ... 
}