Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @PostConstruct中抛出的异常导致JSF 2.1中出现IllegalStateException_Java_Jsf 2_Richfaces - Fatal编程技术网

Java @PostConstruct中抛出的异常导致JSF 2.1中出现IllegalStateException

Java @PostConstruct中抛出的异常导致JSF 2.1中出现IllegalStateException,java,jsf-2,richfaces,Java,Jsf 2,Richfaces,我在@viewscope管理bean上有一个init方法。在后期构造中,我从数据库加载数据。我有一个定制的ExceptionHandlerWrapper来捕获所有Exception并发送到错误页面。然而,当@PostConstuct抛出异常时,我收到一个非法状态异常,并且没有重定向到错误页面。我试过很多组合 我在我的执行官身上试过了 externalContext.getRequestMap().put(ERROR_BEAN_ID, ERROR_TEXT); externalContext.di

我在@viewscope管理bean上有一个init方法。在后期构造中,我从数据库加载数据。我有一个定制的ExceptionHandlerWrapper来捕获所有Exception并发送到错误页面。然而,当@PostConstuct抛出异常时,我收到一个非法状态异常,并且没有重定向到错误页面。我试过很多组合

我在我的执行官身上试过了

externalContext.getRequestMap().put(ERROR_BEAN_ID, ERROR_TEXT);
externalContext.dispatch(ERROR_PAGE);
fc.responseComplete();
下面这一行是我最初拥有的。它也不起作用

externalContext.getFlash().put(ERROR_BEAN_ID, ERROR_TEXT);
nav.handleNavigation(fc, null, ERROR_PAGE);
fc.renderResponse();
这些都导致了非法的例外。我还调用了redirect,得到了相同的结果

您能否全局捕获@PostConstruct抛出的错误

这些都导致了非法的例外

我想是“响应已提交”的消息?好吧,那是一个不归路的点。响应的一部分已经发送到客户端(webbrowser)。无法收回已发送的字节。服务器将以日志中的此异常结束,而客户端将以半成品响应结束

你能做什么

最直接的方法是将响应缓冲区大小扩大到最大页面的大小。例如,64KB:


javax.faces.FACELETS\u缓冲区\u大小
65536
根据服务器配置,默认值为~2KB。您只需要记住,当服务器必须处理相对较多的请求/响应时,这可能会占用内存。轮廓和测量正确

另一种方法是在呈现/提交响应之前引用bean,以便在该点之前触发它的(后期)构造。可能问题中的bean是第一次在视图的最底部被引用,远远超出了~2KB响应大小边界。您可以在视图顶部的某个位置使用
来接管
@PostConstruct
的工作。例如


public void init() {
    if (!FacesContext.getCurrentInstance().isPostback()) {
        // Do here your original @PostConstruct job.
    }
}