java.lang.IllegalStateException
org.apache.catalina.connector.ResponseFacade.reset(ResponseFacade.java:310)
Вы получили это исключение , потому что ответ уже принят.
com.sun.faces.context.ExternalContextImpl.responseReset(ExternalContextImpl.java:821)
com.sun.faces.context.ExceptionHandlerImpl.throwIt(ExceptionHandlerImpl.java:251)
com.sun.faces.context.ExceptionHandlerImpl.handle(ExceptionHandlerImpl.java:141)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:119)
com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:113)
Итак, JSF обнаружил исключение во время фазы просмотра восстановления и должен выбросить его (чтобы он оказался на странице ошибки), однако это не удалось сделать, поскольку ответ уже был зафиксирован в этот момент (без уведомления JSF о том, что он должен немедленно перейти к ответу).
Непонятно, когда именно этот фазовый слушатель выполняет свою работу, но ваш основной интерес будет выяснить, какое именно исключение было выброшено на этапе просмотра восстановления, а также, почему ответ уже зафиксирован в этот момент. На этот вопрос нельзя ответить на основании кода и информации, размещенной до настоящего времени. Запуск отладчика должен рассказать вам больше об исключении, а отслеживание потока кода, в котором вы фиксируете ответ, должно рассказать больше о непреднамеренной фиксации.
Независимо от того, ваше ниже функциональное требование интригует меня:
Я должен выйти из системы после тайм-аута сеанса. Я использую EventListenter для очистки сессии
Я не понимаю, почему это необходимо. Зарегистрированный пользователь обычно представляется как атрибут сеанса. Если время сеанса истекло, то вошедший в систему пользователь должен уже автоматически исчезнуть. Вам не нужно предпринимать никаких действий по очистке самостоятельно. Вам просто нужно проверить наличие вошедшего в систему пользователя в сеансе всякий раз, когда вам нужно выполнить какие-либо действия на его основе.