2012-01-06 22 views
6

ユーザのログインの前に、タイプがxxx.detail.jsfの場合、ログインページにリダイレクトされ、ユーザがログインできるようになります。この作業はすでに完了しています。ユーザーがログインした後にxxx.detail.jsfにリダイレクトするにはどうすればよいですか?ユーザーログイン後にユーザーのアクセスページにリダイレクトする方法は?

私はEclipse Indigo、Tomcat 7、Mojarra 2.0.3を使用しています。

+0

あなたが意味することは確かに不明です。 "* xxx.detail.jsfと入力すると、ログインページにリダイレクトされます*"とはどういう意味ですか? – Lion

+0

@Lionユーザーがログイン前にいくつかのページ(例:detail.jsf)にアクセスしようとすると、システムはユーザーをログインページにリダイレクトし、ユーザーがしたいページ(例:detail.jsf)にリダイレクトしますユーザーがシステムに正常にログインした後にアクセスします。 –

答えて

10

ログインページにリダイレクトする時点で、現在のリクエストURIを保存する必要があります。 Filterを使用してログインチェックとリダイレクトを実行する可能性があります。その場合、あなたは現在のリクエストURIを取得するためにHttpServletRequest#getRequestURI()を使用することができます。

String requestURI = request.getRequestURI(); 

あなたはリダイレクトURLにリクエストパラメータとして渡すか、セッションでそれを格納することができどちらか。リクエストパラメータとして渡すと最も安全である:ログインページに関連した豆で

response.sendRedirect(request.getContextPath() + "/login.jsf?from=" + URLEncoder.encode(requestURI, "UTF-8")); 

、あなたは管理プロパティやビューのパラメータとして設定することができます。 Beanがビュースコープであると仮定し、素晴らしいAjaxアクション/検証などを実行できるとしましょう。実際のログインが成功したときに次に

<f:metadata> 
    <f:viewParam name="from" value="#{login.from}" /> 
</f:metadata> 

、あなたがExternalContext#redirect()によってそのURIにリダイレクトすることができます:その場合は、ビューパラメータはきちんとした方法である

public void login() throws IOException { 
    // ... 

    FacesContext.getCurrentInstance().getExternalContext().redirect(from); 
} 

(必要に応じて電源A fromnullの場合のデフォルトターゲット)

+0

私のコードであなたの答えをどのように追加するか教えてください。 'externalContext.redirect(from);' この行にエラーが発生します –

+0

通常の方法で 'FacesContext'で利用できます。私は私の答えを編集しました。 – BalusC

+0

あなたの答えをありがとう、それは私の多くを助けます。 3秒間カウントダウンしてから、ページにリダイレクトし始めたい場合は、どうすればいいですか? –

関連する問題