我正在使用命令按钮将表单发布到backing 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调用的方法,任何想法如何解决这个问题?
答案 0 :(得分:0)
我刚刚意识到我的问题 - 我已经习惯了使用JSF的导航规则功能,我完全忽略了如果不使用导航规则就不需要返回值的事实!例外情况告诉我这是导航问题,但我没有看到它。
简单的解决方法是让我将commandButton操作设置为一个没有返回值并且没有绑定到任何导航规则的方法。