Как проверить, есть ли активный сеанс на странице JSF? - PullRequest
1 голос
/ 16 января 2011

есть ли способ проверить, существует ли активный сеанс непосредственно на странице jsf?Я пробовал это, но это не работает:

<p:ajaxStatus onerror="#{session == null ? 'idleDialog.show();' : null}"

заранее спасибо

@ Update Я вижу, что onerror не запускается, даже если viewExpiredExceptionoccurr.

Ответы [ 2 ]

3 голосов
/ 16 января 2011

Всегда существует активный сеанс во время оценки EL.Если нет до того, как страница была открыта, она создается автоматически.

В сеансах с истекающим сроком действия JSF возникает проблема из-за так называемого «метода сохранения состояния».По умолчанию состояние созданной страницы сохраняется в сеансе.Если вы попытаетесь отправить форму, и сеанс истек, состояние будет потеряно, и, следовательно, произойдет ошибка.

Но даже в этом случае генерируется новый сеанс.Таким образом, как отметил BalusC, вы можете сохранить сеанс живым - опрос с помощью запросов ajax (например, richfaces имеет такие возможности), так что сеанс никогда не истекает

0 голосов
/ 16 января 2011

Вы можете использовать следующее выражение EL в JSF 2.0:

#{facesContext.externalContext.getSession(false) == null}

Обратите внимание, что ссылка на неявный объект EL session автоматически (повторно) создаст его снова. Таким образом, этот никогда не может быть использован для тестирования.

1009 * Е.Г. *

Предположим, вы бы аннулировали сеанс в компоненте поддержки, и был создан Facelet со следующим содержимым:

#{facesContext.externalContext.getSession(false) == null}
#{session.new}
#{facesContext.externalContext.getSession(false) == null}

Это будет означать:

true true false

Сначала сеанс действительно завершился, но с помощью ссылки на неявный объект EL он снова создается (и будет в новом состоянии). Затем второй тест обнаруживает, что сессия снова там.

...