Как сохранить состояние managedBean, когда время сеанса истекло? - PullRequest
0 голосов
/ 11 января 2012

Я работаю для клиента, у которого есть своя собственная система управления сессиями на случай простоя.Происходит следующее:

  1. Пользователь не используется в течение установленного периода времени.
  2. Время ожидания сеанса перенаправляет на страницу входа
  3. Пользователь вводит учетные данные и перенаправляетсятуда, где он был.

Теперь описанный выше процесс обрабатывается путем передачи запроса POST, передавающего javax.faces.ViewState в систему управления сеансами.Однако в случае тайм-аутов для обработки и перенаправления требуется только 8 КБ данных в запросе.Но поскольку мой управляемый компонент сохраняет большое количество данных (банковское приложение, необходимо отслеживать вычисления!), Размер запроса велик (около 20 КБ), из-за которого происходит сбой перенаправления.

Так что естьВ любом случае я могу как-то сохранить ViewState?Или лучше, как я могу предотвратить тайм-аут?Что-то вроде поддержания сеанса живым?

Все мои управляемые bean-компоненты имеют область действия session.

EDIT: На всякий случай требуется контекстный параметр javax.faces.STATE_SAVING_METHOD в web.xmlдля client в целях производительности.

РЕДАКТИРОВАТЬ: сделал трассировку потока с помощью HttpWatch и обнаружил, что javax.faces.ViewState занимает 18 КБ из всех 22 КБ размеразапрос POST.Поэтому моя цель сузиться до уменьшения размера ViewState.Любой способ сделать это?

1 Ответ

1 голос
/ 12 января 2012

Сохранение состояния сохраняет только данные, связанные с текущим представлением. Ваша проблема здесь в том, что bean-объекты сессионной области потеряны. Я предлагаю два способа решения проблемы:

1) Реализуйте HttpSessionListener и в его методе sessionDestroyed () получите бины, сериализуйте их и сохраните их в строке базы данных, связанной с текущим пользователем. Когда пользователь снова входит в систему, вы можете получить бины, десериализовать их и поместить в сеанс пользователя.

2) Реализовать опрос ajax, который будет пинговать сервер за определенный период, и таким образом сеанс не будет прерываться по времени. Этого можно добиться, используя библиотеку Richfaces JSF, которая имеет встроенный компонент JSF для опроса ajax.

...