重定向表单托管bean构造函数抛出“java.lang.IllegalStateException”

时间:2011-04-14 08:43:37

标签: java jsf javabeans httpresponse

在我的JSF应用程序中,我需要从托管bean构造函数重定向。我有以下代码:

HttpServletResponse httpServletResponse = (HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse();
httpServletResponse.sendRedirect("HomeV.jsf");

但是这会引发以下异常:

java.lang.IllegalStateException
    at org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:435)
    at javax.servlet.http.HttpServletResponseWrapper.sendRedirect(HttpServletResponseWrapper.java:126)
    at com.sun.faces.context.ExternalContextImpl.redirect(ExternalContextImpl.java:419)

我甚至试过以下:

FacesContext.getCurrentInstance().getExternalContext().redirect("HomeV.jsf");

如与此here相关的stackoverflow问题中所述,但我仍面临同样的异常。

2 个答案:

答案 0 :(得分:2)

不要在构造函数中这样做。我怀疑那里的反应是否处于适当的状态。也许你可以尝试在@PostConstruct中进行,但我不保证它会起作用。

理想情况下,您应该通过bean操作方法中的导航规则进行重定向。如果要重定向多个操作,可以使用PhaseListener

答案 1 :(得分:0)

当简单的上下文被初始化时,也可以创建Bean,所以这根本不是正确的方法。