我的自定义ExceptionHandler中存在重定向问题。如果发生异常,ExceptionHandler应该处理NullPointerExceptions并执行重定向。这里是处理程序的一部分,负责重定向:捕捉异常后重定向的问题
FacesContext fc = FacesContext.getCurrentInstance();
NavigationHandler nav = fc.getApplication().getNavigationHandler();
nav.handleNavigation(fc, null, "error");
我有一个简单的页面来测试的ExceptionHandler:
<h:outputText value="#{requestTestBean.firstname}" />
而且在名字的吸气剂的方法我强迫一个NullPointerException :
Object x = null;
x.toString();
重定向到我的错误页面,工作正常,这个小例子,但是当我在页面上增加了相当多的内容(如与许多条目和图标菜单)笔他重定向不起作用,因为响应已经在exceptionHandler方法中提交。我也尝试通过response.sendRedirect()重定向到错误页面,但也出现了相同的问题。
为什么响应已经提交?有没有任何上下文参数或其他任何东西来防止这种行为?
感谢
实际上这只是一个小例子,我不认为它会在讨论如何编写好的代码时结束......在原始应用程序中,我在@PostConstruct方法中进行所有初始化,但发生相同的错误因为在RENDER_RESPONSE阶段中都调用了(getter和postconstruct方法).... - ExceptionHandler不适用于NullPointerExceptions - 它适用于某些应用程序异常,如“AuthorizationException”等。但是,感谢与缓冲区大小的提示!上下文参数不起作用,但我会尝试直接在JBoss服务器中设置缓冲区大小 – 2011-05-06 06:58:23
在afterphase()侦听器中,我需要做一些安全检查并重定向到相同的'response already committed'问题如果用户不被允许访问jsf页面,则显示一个页面。这是不是一个好主意? – 2016-05-31 14:34:26