2012-02-28 15 views
1

私は自分のbeanにpreRenderビューイベントを持っています。ユーザーの一部の検証を行い、何らかの条件が発生したときにprettyFacesを使ってログインページにリダイレクトしますprettyFacesのリダイレクトはpreRenderViewイベントでは機能しません

JSF:

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

あなたが返すことで移動することはできません:マネージドBean

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

リダイレクトが動作するようには思えない、ここのコードは、理由は、私は知りません行為中の文字列イオンリスナ法。それは完全に無視されます。これは、<h:commandXxx action="...">によって提供されるような実際のアクションの方法でのみ可能です。

代わりにできることは、NavigationHandler#handleNavigation()を手動で呼び出すことです。

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

あなたは正しいです:) – Lincoln

+0

@BalusC、prettyfacesを使用していない場合のpreRender内を移動する方法? –

+0

@マ:同じように。 '' pretty:login "'の代わりに '' login.xhtml ''のような通常の結果値を使用してください。あるいは、 'ExternalContext#redirect()'だけを使用してください。 – BalusC

関連する問題