2013-03-21 17 views
1

下面的代碼正在與請求範圍託管Bean和消息被顯示在p:messages標籤:錯誤FacesContext中已經釋放

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); 
    } 
} 

當我試圖在一個視圖使用它作用域確定管理Bean在記錄器中給出錯誤消息:

Error the FacesContext is already released! 

和JSF頁面掛起而不顯示faces消息。

回答

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); 
    } 
} 
+0

謝謝,它的工作原理。對於請求bean,上下文屬性已針對每個調用進行了初始化,因此隱藏了該錯誤,但對於視圖範圍的bean,它是不同的。 – faissal 2013-03-21 14:01:13