FacesContext已经发布时出错

时间:2013-03-21 12:55:09

标签: jsf-2 message facescontext view-scope

以下代码正在使用请求范围托管Bean,并且消息显示在p:messages标记中:

FacesContext context = FacesContext.getCurrentInstance();

public void addAction() {
    if(commande.exists()) {
                context.addMessage("Commande", new FacesMessage(
                        FacesMessage.SEVERITY_ERROR,"Error Message : commande exists", null));
    } else {
        commandeService.create(commande);
    }
}

当我尝试在视图作用域 Managed Bean中使用它时,它会在记录器中显示错误消息:

Error the FacesContext is already released!

并且JSF页面挂起而没有显示面部消息。

1 个答案:

答案 0 :(得分:1)

您应永远FacesContext或其任何属性的当前实例指定为托管bean的属性。当前实例仅在当前HTTP请求中有效,它在HTTP请求结束时被销毁,在任何后续HTTP请求中都不再有效。

您应始终在方法本地范围内获取当前实例。

public void addAction() {
    if (commande.exists()) {
        FacesContext.getCurrentInstance().addMessage("Commande", new FacesMessage(
            FacesMessage.SEVERITY_ERROR, "Error Message : commande exists", null));
    } else {
        commandeService.create(commande);
    }
}