0

我正在使用 Apache MyFaces,需要以不同于其他内部服务器错误的方式处理 ViewExpiredException。但我发现如果我包含错误代码,则为 500;然后在 ViewExpiredException 错误中,它也采用错误代码的路径。

下面是 web.xml 配置:

<error-page>
    <exception-type>javax.faces.application.ViewExpiredException</exception-type>
    <location>/login.xhtml?faces-redirect=true</location>
</error-page> 

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

对于上述两种情况,如何确保我可以重定向到不同的 URL?引用了多个错误代码配置 web.xml,我可以用单个 servlet 替换该位置;但是如何捕获 servlet 中的错误呢?

4

2 回答 2

0

对于 ViewExpiredException 为什么不尝试通过 CustomExceptionHandler 处理异常并通过 handle() 方法将用户重定向到您想要的任何页面

于 2013-05-27T17:56:01.630 回答
0

我在这里有两个问题:

一种。识别 javax.faces.application.ViewExpiredException 并重定向到 /login.xhtml?faces-redirect=true。如果没有 faces-redirect,重定向到 XHTML 页面会抛出错误

湾。确保将状态代码为 500 的其他错误重定向到适当的页面。

这些是通过以下方式解决的:

1> 创建一个检查 HTTP 代码的servlet,然后检查错误是否是由于 ViewExpiredException 引起的。根据错误情况,servlet 将请求转发到特定的 URL。

if (request.getAttribute("javax.servlet.error.status_code") == 500) {
      excep = (Class<? extends Exception>) request
              .getAttribute("javax.servlet.error.exception_type");
      if (excep != null) {
            if (excep.getCanonicalName().equalsIgnoreCase(
                "javax.faces.application.ViewExpiredException")) {
              //you can forward to another page like /login.xhtml?faces-redirect=true
            } else {
             //you can forward to different page with error message
            }
      }
      }

2> 更改web.xml以将所有 500 异常转发到此 servlet

<error-page>
    <error-code>500</error-code>
    <location>/error</location><!-- here error is name of servlet -->
</error-page>
于 2013-06-03T08:12:36.573 回答