sendRedirect

时间:2017-10-26 14:52:30

标签: java servlets

我正在使用带有JSF2框架的Glassfish 4服务器。

我的问题

调用response.sendRedirect方法时,我遇到IllegalStateException。

我没有一个线索为什么会引发此异常。

上下文

对于每个xhtml页面,我都会调用此方法来检查用户是否仍然登录。

<body id="body" onload="#{utilisateurBean.isUserLoggedIn()}">

方法

public void isUserLoggedIn() throws IOException {
    if(this.user == null){
        HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
        response.sendRedirect("Project/accueil/index.xhtml");
    }
}

异常

Infos:   Exception when handling error trying to reset the response.
java.lang.IllegalStateException

或者

Avertissement:   Servlet.service() for servlet session.AppExceptionHandler threw exception
java.lang.IllegalStateException: Cannot forward after response has been committed

我不知道为什么要提交回复。

感谢您的帮助:)

2 个答案:

答案 0 :(得分:1)

当响应已提交/定义时,您无法更改响应。

您在此处显示该页面,因此您的回复已经定义。

您必须以另一种方式执行此操作,例如显示错误消息,指出用户未连接并要求用户重新登录。

你也可以使用javascript进行重定向。

答案 1 :(得分:1)

使用以下代码段更改您的代码:

public void isUserLoggedIn() throws IOException {
if(this.user == null){
    HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
    response.sendRedirect("Project/accueil/index.xhtml");
    return;
 }
}

或添加一项检查以验证是否已提交响应。

response.isCommitted()

有关已提交的回复的更多信息,请查看this