Страница PrettyFaces 404 без перенаправления URL

В нашем приложении с PrettyFaces 2.0.12.Final перенаправления настроены в файле pretty-config.xml.

<url-mapping id="foo">
    <pattern value="/foo/#{alias}" />
    <view-id value="/foo.xhtml" />
</url-mapping>

У нас есть пользовательская страница 404, настроенная в нашем web.xml.

<error-page>
    <error-code>404</error-code>
    <location>/404.xhtml</location>
</error-page>

Когда пользователь получает ошибку 404 Not Found для несуществующего «псевдонима» foo, он перенаправляется на «/404.xhtml», а строка URL-адреса браузера не сохраняет ошибочный адрес.

Есть ли способ сохранить URL-адрес «/foo/aliasdoesnotexist» в строке URL-адреса браузера и по-прежнему отображать страницу 404?


person mheppler9d    schedule 22.07.2015    source источник


Ответы (1)


Один из способов справиться с этим сценарием — обработать исключение в вашем приложении и выполнить внутреннюю переадресацию на страницу ошибки:

Вы можете настроить сопоставление PrettyFaces для страницы 404:

<url-mapping id="foo">
    <pattern value="/foo/#{alias}" />
    <view-id value="/foo.xhtml" />
</url-mapping>

Затем в коде вашего приложения:

catch ( Exception e )
{
    String contextName = FacesContext.getCurrentInstance().getExternalContext().getContextName();
    FacesContext.getCurrentInstance().getExternalContext().dispatch(contextName + "/404");
}

Если вы хотите перехватывать исключение глобально, вам нужно создать для этого фильтр сервлета. См. следующий раздел, чтобы узнать, как создать фильтр, перехватывающий все исключения:

как мне глобально перехватывать ошибки, регистрировать их и показывать пользователю страницу с ошибкой в ​​приложении J2EE

Надеюсь это поможет!

~ Линкольн

person Lincoln    schedule 23.07.2015