Это ошибка в ранней версии Mojarra, которая возникает, когда вы настроили PhaseListener
, который должен выполняться при восстановлении вида, но UIViewRoot
равен null
. Эта ошибка была введена в Mojarra 2.0.4 и была зарегистрирована как выпуск 1764 и исправлена с версии 2.1.0 Mojarra согласно отчету (и 2.0.6 согласно исходному коду). Таким образом, обновление хотя бы до этой версии должно решить эту проблему.
После того, как вы обновите Моджарру, вы столкнетесь с другой проблемой. Мохарра не отправляет 404, когда представление не найдено, но вместо этого выдает com.sun.faces.context.FacesFileNotFoundException
, который является подклассом java.io.FileNotFoundException
. Так что это заканчивается как ответ HTTP 500. Таким образом, если вы настроили страницу ошибки для кода ошибки 404, то она вообще не будет отображаться, а вместо этого будет показана страница ошибки с кодом ошибки 500 или наиболее близкое совпадение по типу исключения. Вместо этого вам нужно настроить страницу ошибки следующим образом:
<error-page>
<exception-type>com.sun.faces.context.FacesFileNotFoundException</exception-type>
<location>/errors/404.xhtml</location>
</error-page>
или если вы не хотите зависеть от реализации JSF
<error-page>
<exception-type>java.io.FileNotFoundException</exception-type>
<location>/errors/404.xhtml</location>
</error-page>