2012-02-28 1 views
1

내 bean에서 preRender 뷰 이벤트를 가지고 있으며, 사용자가 뷰잉 이벤트를 일부 확인하고 어떤 상황이 발생하면 prettyFaces를 사용하여 로그인 페이지로 리디렉션하지만prettyFaces 리다이렉트가 preRenderView 이벤트와 함께 작동하지 않는다.

JSF :

<f:event type="preRenderView" listener="#{myBean.preRender}" /> 

관리 콩 : 당신은 반환하여 탐색 할 수

public String preRender() { 
     log.debug("preRender myPage for user " + userId); 
     try { 
      User user = userService.getUserById(userId); 
      if (!user.isSomeCondition()) { 
       log.debug("Bad Condition"); 
       return "pretty:login"; 
      } 
     } catch (Exception e) { 
      log.error("Error in preRender myPage for user " 
        + userId); 
      return "pretty:login"; 
     } 

     return null; 
    } 

답변

6

리디렉션 내가 왜 모르는, 작동하지 않는 것, 여기에 코드입니다 행동의 끈 이온 리스너 방법. 그것은 완전히 무시 될 것입니다. 에서 제공하는 실제 행동 방법에서만 가능합니다.

대신 수행 할 수있는 것은 NavigationHandler#handleNavigation()을 수동으로 호출하는 것입니다.

FacesContext context = FacesContext.getCurrentInstance(); 
NavigationHandler navigator = context.getApplication().getNavigationHandler(); 
navigator.handleNavigation(context, null, "pretty:login"); 
+0

정확합니다 :) – Lincoln

+0

@BalusC, prettyfaces를 사용하지 않는 경우 preRender에서 탐색하는 방법은 무엇입니까? –

+0

@Mah : 같은 방법입니다. ''pretty : login "'대신''login.xhtml ''과 같은 일반적인 결과 값을 사용하십시오. 또는,'ExternalContext # redirect()'를 사용하십시오. – BalusC