2016-03-04 6 views
2

У меня есть страница входа, которая не защищена и доступна через различные навигационные окна.Избегайте ViewExpiredException в JSF 1.2 на одной странице

Проблема: многие пользователи получают доступ к этой странице входа и оставляют ее открытой на некоторое время, а затем снова регистрируются. Boom! Возникает ужасное ViewExpiredException! Я бы хотел, чтобы исключение ViewExpiredException позволяло им снова войти в систему. Мне не нужен обходной путь для всех просмотров, но только знак на странице.

Я не могу перейти на JSF2 (по причинам бюджета).

У меня есть такая конфигурация:.

javax.faces.STATE_SAVING_METHOD = server 

, что я не могу изменить (у нас есть ограниченные пропускные и механизмы, которые блокируют HTTP-запроса больше, чем небольшая страница формы с очень ограниченными полями ввода

Любая идея?

+2

Если вы используете Mojarra (не MyFaces), вы можете настроить его только для всего приложения (не одной страницы), установив для параметра context 'com.sun.faces.enableRestoreView11Compatibility' значение' true'. Это приемлемо? – BalusC

+0

Ну, может быть! Что произойдет на других страницах, когда срок действия представления истек? Получу ли я опыт «WTF», как вы сказали в предыдущем посте? – pmartin8

+1

Только если вы полагаетесь на состояние области просмотра, но в JSF 1.x «область видимости» уже не существует как область управляемых компонентов. Если вы используете что-то вроде Tomahawk's , чтобы сравнить область просмотра JSF 2.x, то это может закончиться «WTF», потому что бит, на который ссылается , будет реконструирован с нуля вместо повторного использования, когда время истекает (так что вместо этого страницы с ошибкой, вы получаете новый новый bean-компонент) – BalusC

ответ

1

Я не мог получить мою страницу входа в систему из контекста JSF, потому что есть целая куча поведения в моей странице входа, которые зависят от контекста JSF.

Я, наконец, справился с проблемой с грязным взломом. В слушателе RestoreViewPhase я обнаружил, что текущее представление истекло, и я получаю все параметры из HTTP-запроса и в управляемый сеансом компонент.

Затем, когда я вернусь на страницу входа в систему, некоторые javascript автоматически возвратят форму вместе со свежим видом.

Pretty hacky, но он работает.