2010-03-30 7 views

답변

12

당신이 JSF 2.0에 이미있는 경우에, 당신은 FacesContext#getCurrentPhaseId()를 사용하여 확인할 수 있습니다

if (FacesContext.getCurrentInstance().getCurrentPhaseId() == PhaseId.RESTORE_VIEW) { 
    // Restore view called. 
} 

을하지만 아직 JSF 1.x에서에 아직도 있다면, 당신의 가장 좋은 리조트는 PhaseListener를 사용하는 수신 대기 : PhaseId.RESTORE_VIEW, beforePhase() 동안 요청 범위에 플래그/토글/토큰을 설정하고 afterPhase() 동안이 토큰을 제거합니다. Bean의 getter 메소드가 요청 범위에서 그 존재를 검사하게한다.

그렇다면 정확히 무엇을 필요로합니까? 나는 그러한 기능적 요구 사항에 대한 필요성을 결코 갖지 못했습니다. bean의 생성자 또는 @PostConstruct 주석이 달린 메서드가 아마도 이런 초기화 작업을 수행하기에 더 좋은 곳이 아닌가?

+0

Im은 JSF 1.x에서만 가능합니다. 이런 식으로하고 싶은 이유는 복원보기 단계에서 메서드를 호출해야 할 필요가없는 관리 대상 Bean에서 호출하기 때문에 비용이 많이 들기 때문입니다. 그래서 나는 "복원보기에 있다면 아무 것도하지 말라"는 로직을 넣고 싶습니다. – BestPractices

+0

다른 방법으로 생각 해 봤니? 'RENDER_RESPONSE'에 있는지 확인하고 있습니다. 이 방법으로 JSF 1.0 이후 이미 사용 가능한'if (FacesContext.getCurrentInstance(). getRenderResponse()) {}'를 대신 사용할 수 있습니다. 그러나 bean 자체가 요청 범위가된다면 bean의 생성자에 넣을 것입니다. Bean이 너무 많은 책임을 가지고 있지 않다면, 또 다른 문제가 있습니다.) – BalusC

+0

OK - getRenderResponse를 확인해 보았지만 RestoreView 단계에 있는지 여부를 결정할 수 있는지 여부는 확실하지 않았습니다. 나는 그것을 시도 할 것이다 ... – BestPractices

관련 문제