Как установить тайм-аут представления?

В нашем проекте JSF2 на JBoss 7.1.1 мы определяем тайм-аут сеанса в web.xml, и он отлично работает.

Однако иногда мы получаем истечение срока действия, приводя к ошибкам, подобным этому, даже если сеанс все еще жив:

javax.faces.application.ViewExpiredException: viewId:/... - View /... could 
not be restored.

Где мы можем установить тайм-аут представления, как мы это делали для сеансов? Или это истечение срока действия, вызванное чем-то другим?

Ответ 1

Другая причина ViewExpiredException заключается в том, что в сеансе создано слишком много логических представлений. Предел по умолчанию - это специфическая реализация JSF, и каждый синхронный запрос GET на конкретном представлении в основном создает новое представление. Например, когда вы используете Mojarra (который имеет предел по умолчанию 15) и запустите сеанс браузера и откройте один и тот же вид на 16 разных вкладках, а затем отправьте форму в 1-м, вы также можете получить это исключение, Предел настраивается с помощью специфического контекстного параметра реализации JSF, который com.sun.faces.numberOfLogicalViews для Mojarra и org.apache.myfaces.NUMBER_OF_VIEWS_IN_SESSION в MyFaces (по умолчанию 20).

Это, однако, очень редкая проблема в реальном мире. Если ваш webapp действительно предназначен для использования таким образом (например, сайт социальной сети/сообщества, который приглашает к открытию на нескольких вкладках, таких как дискуссионный форум или Q & A), тогда вы можете вместо этого использовать сохранение состояния на стороне клиента.

См. также: