Ошибка FacesContext уже выпущена

Следующий код работает с управляемыми компонентами с областью запроса, и в теге 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);
    }
}

Когда я попытался использовать его в управляемом компоненте view scoped, он выдает сообщение об ошибке в регистраторе:

Error the FacesContext is already released!

и страница JSF зависает, не отображая сообщения о лицах.


person faissal    schedule 21.03.2013    source источник


Ответы (1)


Вы не должны никогда назначать текущий экземпляр 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);
    }
}
person BalusC    schedule 21.03.2013
comment
Спасибо, это работает. с bean-компонентами запроса свойство контекста инициализировалось для каждого вызова, поэтому ошибка была скрыта, но с bean-компонентами с областью видимости все по-другому. - person faissal; 21.03.2013