JSF - Richfaces - Как узнать, истекло ли время сеанса (на клиенте) - PullRequest
3 голосов
/ 08 августа 2009

Я занимаюсь разработкой приложения с использованием JSF-richfaces.

Приложение имеет стандартную страницу входа, управление сеансом и время истечения сеанса составляет 15 минут.

Одним из требований является то, что, когда сеанс истекает, и если пользователь нажимает на любую из ссылок, мне нужно отобразить всплывающее окно (вместо того, чтобы перейти на страницу входа), которое скажет: «Ваша сессия истекла, пожалуйста, войдите снова» .

Если это одна ссылка, я могу использовать a4j, чтобы проверить, истек ли сеанс или нет. Но в моем случае мне нужно отображать оповещение об окончании сеанса для каждой ссылки и кнопки.

Любые указания на это помогут мне двигаться вперед.

Заранее спасибо.

Ответы [ 3 ]

4 голосов
/ 10 августа 2009

Если время ожидания сеанса составляет 15 минут, вы можете просто установить вызов Javascript (используя метод setTimeout), который будет отображать всплывающее окно. Если пользователь щелкнет по одной ссылке, вызов Javascript будет сброшен, поэтому всплывающее окно будет отображаться только в том случае, если пользователь остается на одной и той же странице не менее 15 минут.

Вы можете попробовать что-то подобное:

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

Пояснения:

Мы обертываем код Javascript в компоненте <a4j:outputPanel>, для атрибута ajaxRendered которого установлено значение true. Таким образом, тайм-аут Javascript будет сброшен, даже когда пользователь нажимает на ссылку Ajax. Затем мы устанавливаем тайм-аут на 15 минут (затем 900000 миллисекунд) до отображения модальной панели.

Я предлагаю вам поместить этот код (и модальную панель) также в шаблон, если вы используете Facelets . Этот шаблон будет использоваться для каждой страницы вашего приложения ...

2 голосов
/ 18 августа 2009

RichFaces предоставляет дополнительный способ отлова Timeouts (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>
1 голос
/ 12 августа 2009

Richfaces может обрабатывать истечение сеанса (и другие ошибки), определяя вашу собственную функцию JS, которая выполняется в момент возникновения ситуации.

Руководство Richfaces

...