在我的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");
就像在stackoverflow问题中提到的那样,但我仍然面临同样的异常
不要在构造函数中这样做。我怀疑那里的反应是否恰当。也许你可以尝试在@PostConstruct
中这样做,但我不保证它会工作。
理想情况下,您应该通过bean操作方法中的导航规则进行重定向。如果你想在多个动作上重定向,你可以使用PhaseListener
bean也可以在简单地初始化上下文时创建,所以这根本不是合适的方法。