2011-07-14 23 views
2

私は、この回答に記載されているViewHandlerでJSF 1.2を使用しています。IceFaces Session Expiry causes an exception例外が発生すると、ページが自動的に再生成され、公開ページに適しているため非常に便利でした。問題は、JSF 2.0と互換性がないことです。誰かがJSF 2.0やその代わりに使う方法を知っていますか?JSF 2.0 ViewExpiredException

編集:Stateless JSFを、私はJSF 1.2でやっていたようViewHandlerでそれを行うにはどのような方法があるかどうか、まだ迷っ:

私はこの解決策を見つけました。ここに私のJSF 2.0の現在のコードは次のとおりです。

public class AutoRegeneratorViewHandler extends GlobalResourcesViewHandler 
{ 
    public AutoRegeneratorViewHandler(ViewHandler viewHandler) 
    { 
     super(viewHandler); 
    } 

    @Override 
    public UIViewRoot restoreView(FacesContext p_oContext, String p_sViewID) 
    { 
     UIViewRoot oViewRoot = super.restoreView(p_oContext,p_sViewID); 

     try 
     { 
      if(oViewRoot == null) 
      {   
       initView(p_oContext); 

       oViewRoot = createView(p_oContext,p_sViewID); 
       p_oContext.setViewRoot(oViewRoot); 

       try 
       { 
        renderView(p_oContext,oViewRoot); 
       } 
       catch(IOException e) 
       { 
        e.printStackTrace(); 
       } 

       System.out.println("Created : " + p_sViewID); 
      } 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 

     return oViewRoot; 
    } 
} 

このコードはViewExpiredExceptionを取り除くが、ページがロードされたとき、私がログインしていませんが表示されています。

テストケース:

  • オープンサイト
  • は(web.xmlから)現在のセッションの有効期限よりも多くを待って
  • ユーザー名/パスワードを入力し、ヒットログインボタン
  • ページをリロードログインフォームは空です
  • ページを再読み込み
  • ページの表示ようこそおよびログインフォームが表示されません(期待される動作)
+0

なぜアプリケーションをJSF 2.0に移行できないのですか? http://stackoverflow.com/questions/4441713/migrating-from-jsf-1-2-to-jsf-2-0 – sfrj

+0

私は既にJSF 2.0に移行しましたが、私が1.2で持っていた解決策はもう機能しません! –

答えて

1

JSF2の方法は、独自の例外ハンドラを提供することだと思います。

例外ハンドラでは、すべての未処理例外をループし、ViewExpiredExceptionを確認して削除できます。

1つは、リクエストパラメータを入力し、特定のフェイスレットに移動します。これにより、例外ハンドラから取り込まれたリクエストパラメータを使用する正確で有益なページがレンダリングされます。必要に応じてログイン画面に移動することもできます。

これは、その実装方法を説明したarticleです。

+0

これは良い方法ですが、ログイン画面のコンテキストでは、ブラウザでタイムアウトより長く開いているだけです。ユーザー名/パスワードボックスを入力してログインボタンを押すと、ViewExpiredExceptionに変わります。 .. –

関連する問題