2014-04-16 5 views
0

로그인 상태, 영구 로그인 상태,보기 요청 등에 따라 다른 페이지로 전달되는 RESTORE_VIEW 이전에 실행중인 JSF 위상 수신기를 필사적으로 작성하려고합니다. 조금 복잡하지만 모든 것을 다 풀기 위해 다음 중 아무 것도 제대로 전달하지 못합니다.JSF : handleNavigation, dispatch, PhaseView가 PhaseListener에서 작동하지 않습니다.

faces-config에 탐색 케이스가있는 경우에만 작동하는 것처럼 보입니다. "... 탐색 케이스가 없습니다.

다음과

String path = "/user/login.xhtml"; 
FacesContext context = event.getFacesContext(); // PhaseEvent event; 

context.getApplication().getNavigationHandler().handleNavigation(context, null, path); 

같은 것 "... 발견

context.getExternalContext().dispatch(path); 

그리고 마지막 getViewRoot에서 16,()는 항상 null을 반환 :

context.getViewRoot().setViewId(path); 

어떻게 앞으로 I 네비게이션 케이스를 정의하지 않고 할 수 있습니까?

그것은 재 작동하는지 밝혀졌다 :

String requestUrlString = ((HttpServletRequest)(FacesContext.getCurrentInstance().getExternalContext().getRequest())).getRequestURL().toString(); 
    URL requestUrl = new URL(requestUrlString); 
    String linkUrlString = requestUrl.getProtocol() + ":" + "//" 
      + requestUrl.getHost() + ":" + requestUrl.getPort() 
      + context.getExternalContext().getApplicationContextPath() + "/faces" + path + ".xhtml"; 
    context.getExternalContext().redirect(linkUrlString); 

답변

0

이 시도 :

FacesContext ctx = FacesContext.getCurrentInstance(); 
ctx.getExternalContext().redirect(outcome); 
ctx.responseComplete(); 
+0

감사합니다! 나를 위해 완벽하게 작동합니다. 그러나 다른 사람들은 리디렉션이 결과와 함께 작동하지 않지만 전체 URL이 필요하다는 점을 기억하십시오. 게시자가 코드 작성 방법을 변경했습니다. – mpunktw