В моем случае оказалось, что у меня отсутствовал конечный тег в файле xhtml для одного из вызовов jstl. я использовал выбор тега, и один из тегов между ними не имел конечного тега

есть приложение, которое использует JSF2 и Spring. Приложение отлично работает при развертывании. Но это происходит, если я прошел следующие шаги:

Откройте страницу входа в приложение.Повторно развернуло приложение на сервере.

Попытался войти, используя ранее открытую страницу входа, и он показывает следующее исключение:

javax.servlet.ServletException: null source
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:321)
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)

root cause

java.lang.IllegalArgumentException: null source
    at java.util.EventObject.<init>(EventObject.java:38)
    at javax.faces.event.SystemEvent.<init>(SystemEvent.java:67)
    at javax.faces.event.ComponentSystemEvent.<init>(ComponentSystemEvent.java:69)
    at javax.faces.event.PostRestoreStateEvent.<init>(PostRestoreStateEvent.java:69)
    at com.sun.faces.lifecycle.RestoreViewPhase.deliverPostRestoreStateEvent(RestoreViewPhase.java:256)
    at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:245)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97)
    at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:107)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:308)

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

Кто-нибудь знает ответ?

Ответы на вопрос(4)

http://java.net/jira/browse/JAVASERVERFACES-1758

которыйне исправлено в Мохарре 2.1.x

Решение Вопроса

ViewExpiredException, Это ошибка, которая начала проявляться в Mojarra 2.0.3 и была исправлена ​​в Mojarra 2.1.0. Смотрите такжевыпуск 1762 (обратите внимание, что Мохарра 2.1.0не работать на Tomcat / Jetty, используйте хотя бы Mojarra 2.1.1).

По сути, когда Mojarra не удается создать или восстановить представление, оно обычно выдает достаточно конкретное исключение, но из-за этой ошибки в коде позже неправильно ожидалось допустимое представление, что, в свою очередь, приводит кIllegalArgumentException: null source, Возможныйреальный причиной могло быть то, что представление содержит простую синтаксическую ошибку XML, такую ​​как отсутствующий тег или значение неверного атрибута, для которого Мохарра обычно выбрасывала быFaceletException с очень подробным сообщением с номером строки и положением и тому подобное.

Чтобы предотвратитьViewExpiredExceptionВы должны обновить страницу с помощью запроса GET, прежде чем выполнять какие-либо действия с ней. Если вы используете версию Mojarra, где эта ошибка не проявляется (например, 2.0.2 или старше, или 2.1.0 или новее), то вы могли бы изящно обработать ее с помощью<error-page> вweb.xml на конкретное исключение и предоставить пользовательскую страницу ошибки, на которой конечный пользователь информируется о том, что сеанс истек, вместе со ссылкой на URI начального запроса.

 Rachel12 мар. 2012 г., 21:25
У меня конечно нетуViewExpiredException как моя сессия хранится вcookies и я не держу свою страницу открытой довольно долго. Также просто мысль, третьи стороны на основеjsf любитьicefaces, richfaces а такжеprimefaces Я должен был сократить трудозатраты на разработку, а также на настройку.
 Rachel12 мар. 2012 г., 20:59
У меня точно такая же проблема прямо сейчас, я обновлю свою версию моджарры и посмотрю, получу ли я подобную проблему
 Rachel12 мар. 2012 г., 21:07
Я получаю страницу об ошибке, упомянутую в моем файле web.xml, но я хочу знать, что является причиной этой проблемы и что можно исправить.
 BalusC12 мар. 2012 г., 21:29
@Rachel: тогда это просто другая возможная причина: синтаксическая ошибка в XHTML. Обновите хотя бы до 2.1.0, тогда вы увидитереальный исключение.
 BalusC12 мар. 2012 г., 21:10
@ Рейчел: Если вы спрашиваете оIllegalArgumentException: null sourceКак уже упоминалось в первом абзаце, это ошибка в Мохарре. Обновите до версии 2.1.0. Второй абзац объясняет, что это за ошибка, и другая возможная причинаIllegalArgumentException: null source при использовании Mojarra с этой ошибкой. В третьем абзаце объясняется, как бороться среальный исключение, котороеViewExpiredException в частном случае ОП. Если вы хотите больше информации оViewExpiredException, проверитьstackoverflow.com/tags/viewexpiredexception/info

javax.faces.PARTIAL_STATE_SAVING установлен вложный вы получите этоjava.lang.IllegalArgumentException, Если вы установитеjavax.faces.PARTIAL_STATE_SAVING вправда (и вы знаете, что делаете), вы получите «старый добрый»javax.faces.application.ViewExpiredException назад.

что у меня отсутствовал конечный тег в файле xhtml для одного из вызовов jstl. я использовал выбор тега, и один из тегов между ними не имел конечного тега

Ваш ответ на вопрос