2011-06-27 8 views
0

JSFアプリケーションにユーザーをログアウトするセッションを無効にするログアウトリンクがあります。それは動作しますが、ユーザーをログオンページにリダイレクトしません。それは同じページにとどまります。同じページに再びアクセスしようとすると、ログオンに戻る。私はこれがすぐに起こることを望む。ログアウトcommandLinkはユーザーをログアウトしますが、ページを更新しません

ログアウトリンク:

<h:form> 
    <h:panelGroup id="loginout"> 
     <h:outputText value="#{todoController.loggedInUser}" /> 
     <h:commandLink value="logout" action="#{todoController.logout}" /> 
    </h:panelGroup>   
</h:form> 

ログアウトコード:

public String logout() 
{ 
    System.out.println("testing logout"); 
    FacesContext fc = FacesContext.getCurrentInstance(); 
    ExternalContext ec = fc.getExternalContext(); 

    final HttpServletRequest r = (HttpServletRequest)ec.getRequest(); 
    r.getSession(false).invalidate(); 

    return "../login.html?faces-redirect=true"; 
} 

答えて

6

結果が無効である場合に発生することができます。 login.htmlはJSFページではないようですので、JSFナビゲーションは単に失敗します。

代わりにExternalContext#redirect()を使用します。上記はまた、セッションを無効にするために、よりJSFっぽい道を示すこと

public void logout() throws IOException { 
    ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext(); 
    ec.invalidateSession(); 
    ec.redirect("../login.html"); 
} 

注意。 JSFフードの下から未加工のjavax.servlet.* APIを取得する必要がある場合は、常にがありますか?

+0

ありがとうございました。これはうまくいった。しかし、リダイレクト後にログインしようとすると、「HTTPステータス408エラー - ログインプロセスに許可された時間を超過しました」というメッセージが表示されます。元のページにリダイレクトしましたが、ログインしていないのでログインページにジャンプします。 :-) – Dana

関連する問題