web.xml страницы ошибок не работают, почему? - PullRequest
2 голосов
/ 09 ноября 2011

У меня уже нет идей, и я не знаю, что еще попробовать. Дело в том, что не работает даже одна страница ошибок, я просто хотел бы знать, что я делаю не так? Вот код:

<error-page>
    <exception-type>javax.faces.application.ViewExpiredException</exception-type>
    <location>/sessionexpired.xhtml</location>
</error-page>
<error-page>
    <error-code>500</error-code>
    <location>/500.xhtml</location>
</error-page>

При наличии этого кода в моем web.xml я получаю это сообщение:

Ошибка чтения XML: элемент не найден

Что означает это сообщение? как я могу решить это? Благодаря.

Кстати, я также пытался использовать фильтры для обработки ViewExpiredException , затем он работает в первый раз, когда я отправляю сообщение POST и перенаправляет в файл sessionexpired.xhtml. Но если я нажму назад, а затем снова вызову POST, БАМ! Я снова получаю ViewExpiredException .

ОБНОВЛЕНИЕ 30 НОЯБРЯ 2011 - [АЛЬТЕРНАТИВНОЕ РЕШЕНИЕ] -------------------------------- -----

Через некоторое время я обнаружил, что для того, чтобы это работало, вы должны указать привязку к .html или .jsp файлам , поэтому в конечном итоге это будет:

<error-page>
    <exception-type>javax.faces.application.ViewExpiredException</exception-type>
    <location>/sessionexpired.html</location>
</error-page>
<error-page>
    <error-code>500</error-code>
    <location>/500.jsp</location>
</error-page>

Ответы [ 4 ]

1 голос
/ 11 ноября 2011

Что ж, для тех, кто борется с этой проблемой, используя Glassfish 3.1, вы можете справиться с этой проблемой, следуя этой статье к письму, даже подумав, что я изменил в конце, чтобы использовать sendRedirect () вместонавигатор JSF для рендеринга файла sessionexpired.xhtml , но это ваш выбор, он работает нормально.Вот, пожалуйста:

http://weblogs.java.net/blog/edburns/archive/2009/09/03/dealing-gracefully-viewexpiredexception-jsf2

0 голосов
/ 10 июня 2014

После того, как вы изменили web.xml, вы передислоцировали слух или войну? Некоторые серверы приложений могут кэшировать старую копию web.xml, если вы напрямую перейдете на сервер, чтобы изменить файл. Надеюсь, это может сработать. :)

0 голосов
/ 11 ноября 2011

При наличии этого кода в моем web.xml я получаю это сообщение:

 XML read error: no element found

Согласно комментариям, оказывается, что вы видитеэто в браузере вместо ожидаемой страницы ошибки.Я изначально интерпретировал это как упоминание вашей IDE / редактором из-за синтаксической ошибки в web.xml.Ваш вопрос не совсем ясен по этому поводу.

Что ж, решение этого простое: убедитесь, что <location> из <error-page> соответствует шаблону URL FacesServlet.Проще всего было бы сопоставить FacesServlet с шаблоном URL *.xhtml.


Кстати, я также пытался использовать фильтры для обработки исключительной ситуации ViewExpiredException, затем он работает в первый раз, когда я отправляю сообщение POST и перенаправляет в файл sessionexpired.xhtml.Но если я нажму назад, а затем снова вызову POST, БАМ!Я снова получаю ViewExpiredException.

Это просто вызвано тем, что страница запрашивается из кэша браузера, а не прямо с сервера.См. Также этот ответ для конкретного решения: задняя часть браузера + бобы ViewScope .

0 голосов
/ 09 ноября 2011

Может быть какая-то проблема, попробуйте, может, это поможет ..
Тег <error-page> идет после элемента <servlet-mapping>.

<web-app>
...
<servlet>
 ...
  </servlet>
  <servlet-mapping>
    .....
  </servlet-mapping>
  ...
  <welcome-file-list>
  ...
   </welcome-file-list>
  <error-page>
    <error-code>404</error-code>
    <location>/errorpages/html404.html</location>
  </error-page>
 <taglib>
 ...
 </taglib>
 ...
</web-app>
...