2011-03-08 15 views
0

JSF 2.0とfaceletsを使用します。私はこのコードを書くときユーザーをJSFのログインページにリダイレクトする方法

<% 
HttpSession sess = request.getSession(true); 

if (sess.getAttribute("userName") == null) { 
%> 
<jsp:forward page="/login.xhtml"/> 
<% 
return; 
} else { 
    // some code 
%> 
    <%-- some other code --%> 
<% 
} 
%> 

Netbeans IDEが私をさせません...それぞれのページでチェックしてログインし、それが失敗した場合loginpageにリダイレクトします。

これはどのように使用できますか?

ありがとうございました。

答えて

3

私はフィルタの代わりに、JSPを使用してお勧めします。次に、web.xmlの最初のフィルタの1つとして定義します。

public class DirectAccessBlockFilter implements Filter { 

    private String loginPage = "login.xhtml"; 

    @Override 
    public void doFilter(ServletRequest request, ServletResponse response, 
     FilterChain chain) throws IOException, ServletException { 
     HttpServletRequest httpRequest = (HttpServletRequest) request; 
     HttpSession session = httpRequest.getSession(false); 

     if(session.getAttribute("userName") == null && !httpRequest.getServletPath().contains(loginPage)) { 
      RequestDispatcher dispatcher = request.getRequestDispatcher(loginPage); 
      dispatcher.forward(request, response);   
      return; 
     } 

     chain.doFilter(request, response); 
    } 

} 
+0

しかし、ScriptletをJSPで使用することも可能ですか?それはフェイスレットでのみ制限されていますか? – Selvin

+1

FaceletsとJSPは共存しません。 –

2

しないでください。理由のためにFaceletsがデフォルトビューです。

ログインチェックではなく、次のいずれかで行うべきである:

3

あなたはそれを行うことはできません。 facelets JSPではないため、完全に不可能です。スクリプトレットは存在しません。

さらに、この種のものは、個々のページではなく、サーブレットフィルタで実装する必要があります。でも、あなたはこのようにそれをしない絶対にすべき、

2

他の人が述べたように:さらに、あなたはそれを自分で行うが、自由に利用できる成熟した実装の1つを使用しないでくださいそれが可能ならば。

Faceletsは、コンポーネントツリーを作成する唯一の理由から、XMLパーサによって解析される純粋なXMLドキュメントです。そのように、コンポーネントのレイアウトにはのみが使用されます。どのような種類のスクリプトレットも含めることはできません。

技術的には、あなたが後にしている(間違った)イディオムを多かれ少なかに与えるいくつかのテクニックがあります。例えば。そのコードフラグメントをバッキングBeanに配置し、各ページの先頭にEL式で呼び出すことができます。また、Javaベースのカスタムコンポーネントを作成して、各ページの先頭に配置することもできます。最後に、そのコードを含む独自のカスタムEL関数を定義し、それを呼び出すことができます。

しかし、私は十分にストレスを感じることはできませんが、そのようなアプローチは普通ではありません。は間違ってです。 mmancoとBozhoによって提案されたフィルタまたはphaselistenerを使用してください。あなたがこれで暮らすことができない場合は、おそらくJSFとFaceletsがあなたにとって最良の技術ではなく、JSPまたはPHPでのプログラミングを行うほうがよいでしょう。

関連する問題