PrimeFacesのカウントダウンタイマーconfirmDialog

ほとんどJava

私のWebアプリケーションには、ユーザーが5分間アイドル状態になるとトリガーされるアイドルモニターがあります。2分間待機する確認ダイアログが開きます。その後、ログインページにリダイレクトされます。

要件:ユーザーがログインページにリダイレクトされるまでの残り時間をカウントダウンタイマーで表示したい。

baseTemplate.xhtml:

<h:form>

    <p:idleMonitor timeout="#{idleMonitorView.timeoutVal}"
        onidle="startTimer()" />

    <p:confirmDialog id="confirmDialog"
        message="You have been idle, Please click ok to remain logged in"
        header="Are you there?" severity="alert" widgetVar="idleDialog">                 
        <p:commandButton id="confirm" value="Ok" oncomplete="extendSession()" />

    </p:confirmDialog>

    <p:remoteCommand name="terminateIdleSession" actionListener="#{idleMonitorView.onIdle}" out="count" />

    <script type="text/javascript">
        var extend_session = 0;
        function startTimer() {

            extend_session = 0;
            setTimeout("timeout()", 120000);
            PF('idleDialog').show();
        }

        function timeout() {
            if (extend_session == 0) {
                terminateIdleSession();
            }
        }

        function extendSession() {
            extend_session = 1;
            PF('idleDialog').hide();
        }
    </script>
</h:form>

問題:この要件を達成する方法がわかりません。

Jasper de Vries

タイマーを毎秒更新するJavaScript間隔(または必要なその他の間隔)を作成する必要があります。少しのjQueryを使用してタイマーを更新できます。タイマーとして使用できるダイアログメッセージにスパンを追加することをお勧めします。

$("#myForm\\:confirmDialog .ui-confirm-dialog-message").append("<span id=logoffTimeout/>");

myFormこちらのフォームで使用したIDに置き換える必要があります。

ダイアログが表示されたら、ログオフタイマーが期限切れになる時間を計算し、たとえばに保存しwindow.logoffTimeます。これで、次の関数を使用してタイマーを更新できます。

function updateTimer(){
  var seconds = Math.ceil((window.logoffTime - new Date().getTime()) / 1000);
  $("#logoffTimeout").html(seconds);
}

ボタンとリモートコマンドでは、を使用することをお勧めしますprocess="@this"参照:PrimeFacesプロセス/更新およびJSF f:ajax実行/レンダリング属性について

JavaScriptでタイムアウトを開始すると、IDが返されることを知っておく必要があります。そのIDを使用してタイムアウトをクリアできます。

私はこのXHTMLに行き着きました:

<p:confirmDialog id="confirmDialog"
                 message="Please click Ok before the timer runs out: "
                 header="Are you there?"
                 severity="alert"
                 closable="false"
                 widgetVar="idleDialog">
  <p:commandButton id="confirm"
                   value="Ok"
                   process="@this"
                   onclick="clearTimeout(window.logoffTimeoutId); PF('idleDialog').hide();"/>
</p:confirmDialog>

<p:remoteCommand name="terminateIdleSession"
                 actionListener="#{idleMonitorView.onIdle}"
                 process="@this"
                 out="count"/>

<p:idleMonitor timeout="#{5 * 60 * 1000}"
               onidle="startTimer()"/>

そしてこのJavaScript:

function startTimer() {
  clearTimeout(window.logoffUpdaterId);
  PF('idleDialog').show();
  // Set timeout to 2 minutes
  var timeout = 2 * 60 * 1000;
  // Calculate when the time runs out
  window.logoffTime = new Date().getTime() + timeout;
  // Start timer which calls remote command
  window.logoffTimeoutId = setTimeout(terminateIdleSession, timeout);
  // Update timer every second
  window.logoffUpdaterId = setInterval(updateTimer, 1000);
  // Update timer now
  updateTimer();
}

// Update the timer
function updateTimer() {
  var seconds = Math.ceil((window.logoffTime - new Date().getTime()) / 1000);
  $("#logoffTimeout").html(seconds);
}

// Create span to contain the timer
$(function(){
  $("#myForm\\:confirmDialog .ui-confirm-dialog-message").append("<span id=logoffTimeout/>");
});

XHTMLに埋め込まれたJavaScriptを使用していることに気づきました。その場合、CDATAXMLエラーが発生しないように追加します。

<script type="text/javascript">
//<![CDATA[
...
//]]>
</script>

キャッシュの利点を提供するファイル/リソースからスクリプトをロードすることをお勧めします。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

JavaFXのカウントダウンタイマー

分類Dev

Reactのカウントダウンタイマー

分類Dev

Pygameのカウントダウンタイマー

分類Dev

分と秒のjQueryカウントダウンタイマー

分類Dev

カウントダウンタイマーの遅延-Android

分類Dev

Angular6のカウントダウンタイマー

分類Dev

react-nativeのカウントダウンタイマー

分類Dev

javascriptカウントダウンタイマーの作成

分類Dev

Javascriptタイマーのカウントダウン

分類Dev

WPF C#-タイマーのカウントダウン

分類Dev

タイマーカウントダウンのjquery配列

分類Dev

Corona SDK(LUA)のタイマーとカウントダウン

分類Dev

AndroidProgressBarタイマーのカウントダウン

分類Dev

0でのIOS停止カウントダウンタイマー

分類Dev

3日ごとのカウントダウンタイマー

分類Dev

複数のカウントダウンタイマー

分類Dev

Androidカウントダウンタイマーの再開

分類Dev

動的な日付のカウントダウンタイマー

分類Dev

カウントダウンタイマーの作り方

分類Dev

c # カウントダウン タイマーの一時停止

分類Dev

カウントダウンタイマーの計算

分類Dev

Rのカウントダウンタイマーはピカピカ?

分類Dev

カウントダウンタイマー付きのAndroidダイアログ

分類Dev

フラッターカウントダウンタイマー

分類Dev

カメラカウントダウンタイマーの問題

分類Dev

テキストビューのカウントダウンタイマー

分類Dev

asp.netページのAjaxのカウントダウンタイマー

分類Dev

ページ上の複数のカウントダウンタイマー

分類Dev

ユーザー入力付きのカウントダウンタイマー

Related 関連記事

  1. 1

    JavaFXのカウントダウンタイマー

  2. 2

    Reactのカウントダウンタイマー

  3. 3

    Pygameのカウントダウンタイマー

  4. 4

    分と秒のjQueryカウントダウンタイマー

  5. 5

    カウントダウンタイマーの遅延-Android

  6. 6

    Angular6のカウントダウンタイマー

  7. 7

    react-nativeのカウントダウンタイマー

  8. 8

    javascriptカウントダウンタイマーの作成

  9. 9

    Javascriptタイマーのカウントダウン

  10. 10

    WPF C#-タイマーのカウントダウン

  11. 11

    タイマーカウントダウンのjquery配列

  12. 12

    Corona SDK(LUA)のタイマーとカウントダウン

  13. 13

    AndroidProgressBarタイマーのカウントダウン

  14. 14

    0でのIOS停止カウントダウンタイマー

  15. 15

    3日ごとのカウントダウンタイマー

  16. 16

    複数のカウントダウンタイマー

  17. 17

    Androidカウントダウンタイマーの再開

  18. 18

    動的な日付のカウントダウンタイマー

  19. 19

    カウントダウンタイマーの作り方

  20. 20

    c # カウントダウン タイマーの一時停止

  21. 21

    カウントダウンタイマーの計算

  22. 22

    Rのカウントダウンタイマーはピカピカ?

  23. 23

    カウントダウンタイマー付きのAndroidダイアログ

  24. 24

    フラッターカウントダウンタイマー

  25. 25

    カメラカウントダウンタイマーの問題

  26. 26

    テキストビューのカウントダウンタイマー

  27. 27

    asp.netページのAjaxのカウントダウンタイマー

  28. 28

    ページ上の複数のカウントダウンタイマー

  29. 29

    ユーザー入力付きのカウントダウンタイマー

ホットタグ

アーカイブ