JSF 1.2 IllegalState从支持bean重定向到外部站点的异常

时间:2014-12-11 03:15:55

标签: java jsf redirect jsf-1.2 illegalstateexception

我正在使用命令按钮将表单发布到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调用的方法,任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我刚刚意识到我的问题 - 我已经习惯了使用JSF的导航规则功能,我完全忽略了如果不使用导航规则就不需要返回值的事实!例外情况告诉我这是导航问题,但我没有看到它。

简单的解决方法是让我将commandButton操作设置为一个没有返回值并且没有绑定到任何导航规则的方法。