我正在使用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>
如何确保我可以重定向到上述两种情况的不同网址? 提到multiple error-code configuration web.xml,我可以用一个servlet替换该位置;但是如何捕获servlet中的错误?
答案 0 :(得分:0)
对于ViewExpiredException,为什么不尝试通过CustomExceptionHandler处理异常,并通过handle()方法将用户重定向到您想要的任何页面
答案 1 :(得分:0)
我在这里遇到了两个问题:
一个。识别javax.faces.application.ViewExpiredException并重定向到/login.xhtml?faces-redirect=true。没有faces-redirect,重定向到XHTML页面会抛出错误
湾确保将状态代码为500的其他错误重定向到适当的页面。
通过以下方式解决:
1&GT;创建了一个 servlet ,它检查HTTP代码,然后检查错误是否是由于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>