没有 URL 重定向的 PrettyFaces 404 页面

PrettyFaces 404 page without URL redirect

在带有 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 Not Found 错误时,对于不存在的 foo "alias",他们将被重定向到“/404.xhtml”,并且浏览器 URL bar不保留违规地址。

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

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

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

<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");
}

如果您想全局捕获异常,您需要创建一个 servlet 过滤器来执行此操作。请参阅以下主题,了解如何创建捕获所有异常的过滤器:

how do I catch errors globally, log them and show user an error page in J2EE app

希望对您有所帮助!

~林肯