2009-08-08 14 views
3

JSFリッチフェイスを使用してアプリケーションを開発しています。JSF Richfaces - セッションがタイムアウトしたかどうかを知る方法(クライアント上)

アプリケーションには標準のログインページとセッション管理があり、セッションの有効期限は15分です。

セッションの有効期限が切れ、ユーザーがいずれかのリンクをクリックすると、ログインページに行く代わりにポップアップを表示する必要があります。「あなたのセッションは期限切れです。もう一度ログインしてください"

私はa4jを使用して、セッションが期限切れであるかどうかを確認することができます。 私の場合、すべてのリンクとボタンに対して「セッションアウト」アラートを表示する必要があります。

これへの指針は、今後の進歩に役立ちます。

ありがとうございます。

答えて

4

セッションタイムアウトが15分の場合は、ポップアップを表示するJavaScriptコール(setTimeoutメソッドを使用)を設定するだけで済みます。ユーザーが1つのリンクをクリックすると、Javascript呼び出しがリセットされるので、ユーザーが同じページを少なくとも15分間開いた場合にのみポップアップが表示されます。

あなたはそのような何かを試すことができます:私たちはtrueに設定ajaxRendered属性を持つ<a4j:outputPanel>コンポーネント内のJavaScriptコードをラップ

<a4j:outputPanel ajaxRendered="true"> 
    <script type="text/javascript"> 
     setTimeout("Richfaces.showModalPanel('xxx');", 900000); 
    </script> 
</a4j:outputPanel> 

説明。こうすることで、ユーザーがAjaxリンクをクリックしてもJavascriptのタイムアウトがリセットされます。 次に、モーダルパネルが表示されるまで、タイムアウトを15分(900000ミリ秒)に設定します。

Faceletsを使用すると、このコード(およびmodalPanelも)をテンプレートに入れることをお勧めします。このテンプレートは、アプリケーションのすべてのページで使用されます。

+0

感謝を。 これは私の問題を50%に解決します 他にも実装したいことは、ユーザーがボタンやリンクをクリックしたときにセッションが有効かどうかを知りたい場合です。 ボタン/リンクのクリックをいくつかのjavascriptアクションにバインドするにはどうすればよいですか? –

1

リッチフェイスは、状況発生時に実行される独自のJS関数を定義することによって、セッションの有効期限(およびその他のエラー)を処理できます。

Richfaces guide

2

RichFacesのクライアント側でタイムアウト(ViewExpiredException)をキャッチするための追加の方法を提供します。

まず、あなたのweb.xmlに次のコードを追加します。

<context-param> 
    <param-name>org.ajax4jsf.handleViewExpiredOnClient</param-name> 
    <param-value>true</param-value> 
</context-param> 

を最後に、ページ上のいくつかのJavaScriptを追加します。答えを

<script type="text/javascript"> 
//<![CDATA[ 
A4J.AJAX.onError = function(req, status, message) { 
    *window.location.reload();* 
} 
//]]> 
</script> 
関連する問題