Jsf 不带URL重定向的PrettyFaces 404页面

Jsf 不带URL重定向的PrettyFaces 404页面,jsf,redirect,http-status-code-404,prettyfaces,Jsf,Redirect,Http Status Code 404,Prettyfaces,在我们的PrettyFaces 2.0.12.Final应用程序中,我们在pretty-config.xml中设置了重定向 <url-mapping id="foo"> <pattern value="/foo/#{alias}" /> <view-id value="/foo.xhtml" /> </url-mapping> 我们在web.xml中设置了一个自定义404页面 <error-page> &l

在我们的PrettyFaces 2.0.12.Final应用程序中,我们在pretty-config.xml中设置了重定向

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

我们在web.xml中设置了一个自定义404页面

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

404
/404.xhtml
当用户收到404 Not Found错误时,对于不存在的foo“别名”,它们将被重定向到“/404.xhtml”,并且浏览器URL栏不会保留有问题的地址


有没有办法在浏览器URL栏中维护“/foo/aliasdoesnotexist”的URL并仍然显示404页面?

处理此情况的一种方法是处理应用程序中的异常并执行内部转发到错误页面:

您可以为404页面设置PrettyFaces映射:

<url-mapping id="foo">
    <pattern value="/foo/#{alias}" />
    <view-id value="/foo.xhtml" />
</url-mapping>
如果希望全局捕获异常,则需要创建一个servlet过滤器来完成此操作。有关如何创建捕获所有异常的筛选器,请参见以下主题:

希望这有帮助

~z~林肯

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