【发布时间】:2014-12-11 03:15:55
【问题描述】:
我正在使用命令按钮将表单发布到支持 bean 方法。在该方法结束时,我试图在响应中设置各种选项后重定向到外部站点。由于重定向,我得到一个 IllegalState 异常。
at com.ibm.ws.webcontainer.webapp.WebAppDispatcherContext.sendRedirectWithStatusCode(WebAppDispatcherContext.java:571)
at com.ibm.ws.webcontainer.webapp.WebAppDispatcherContext.sendRedirect(WebAppDispatcherContext.java:528)
at com.ibm.ws.webcontainer.srt.SRTServletResponse.sendRedirect(SRTServletResponse.java:1234)
at com.sun.faces.context.ExternalContextImpl.redirect(ExternalContextImpl.java:426)
at com.sun.faces.application.NavigationHandlerImpl.handleNavigation(NavigationHandlerImpl.java:181)
这是来自支持 bean 方法的问题代码:
if ( redirectPage != null ) {
logger.debug("attempting redirect: " + redirectPage);
try {
getFacesContext().getExternalContext().redirect(redirectPage);
FacesContext.getCurrentInstance().responseComplete();
} catch (IOException ioException) {
ioException.printStackTrace();
}
}
return result;
我意识到 return 语句是不必要的,不应该达到,但在这个 redirectPage 被填充的情况下,这是必需的功能。我不能使用导航规则来设置动态外部站点重定向,对吧?我能做些什么?
仔细观察异常,似乎是导航处理程序导致了问题。显然 JSF 不喜欢我跳出一个由 commandButton 调用的方法,有什么想法可以解决这个问题吗?
【问题讨论】:
-
你能发布抛出异常的完整堆栈跟踪吗!
-
我刚刚意识到我的问题——我已经习惯了使用 JSF 的导航规则功能,以至于我完全忽略了一个事实,即如果不使用导航规则,则返回值是不必要的!对我来说,简单的解决方法是将 commandButton 操作设置为没有返回值且不绑定任何导航规则的方法。
标签: java jsf redirect jsf-1.2 illegalstateexception