Предотвращение тайм-аута сеанса в течение длительного времени обработки в JSF - PullRequest
7 голосов
/ 24 декабря 2010

Я работал над приложением JSF. В одном месте я должен назвать действие в управляемом бобе. Действие фактически обрабатывает сотни записей и время ожидания сеанса до завершения обработки.

Хотя все записи успешно обрабатываются, срок сеанса истекает, и пользователь отправляется на страницу входа.

Я пытался добавить

session.setMaxInactiveInterval (0);

до обработки записей без эффекта.

Как предотвратить время ожидания сеанса во время такого процесса.

Ответы [ 2 ]

10 голосов
/ 24 декабря 2010

Ввести аяксичные опросы, чтобы поддерживать сеанс в активном состоянии до тех пор, пока у конечного пользователя страница открыта в веб-браузере. Вот пример с небольшой подсказкой jQuery .

<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
    $(document).ready(function() {
        setInterval(function() {
            $.get('poll');
        }, ${(pageContext.session.maxInactiveInterval - 10) * 1000});
    });
</script>

Здесь ${pageContext.session.maxInactiveInterval} возвращает остаток секунд, в течение которых сеанс еще не дожил (и вычитается за 10 секунд - просто чтобы успеть вовремя с опросом) и преобразуется в миллисекунды, чтобы он setInterval() ожидает).

$.get('poll') должен вызывать сервлет, который сопоставлен с url-pattern из /poll и содержит в основном следующую строку в методе doGet().

request.getSession(); // Keep session alive.

Вот и все.

0 голосов
/ 24 декабря 2010

Чтобы предотвратить тайм-аут сеанса, попробуйте использовать поток для обработки.

Поступая таким образом, пользователь сможет выполнять другие действия и не зависать в ожидании завершения процесса.

...