1

次のコードはリクエストスコープのマネージド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);
    }
}

ビュースコープのマネージドBeanで使用しようとすると、ロガーにエラーメッセージが表示されます。

Error the FacesContext is already released!

JSFページはfacesメッセージを表示せずにハングします。

4

1 に答える 1

1

の現在のインスタンスまたはそのプロパティのいずれかをマネージド Bean のプロパティとして割り当てないでください。FacesContext現在のインスタンスは、現在の 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);
    }
}
于 2013-03-21T12:58:09.293 に答える