Бин RequestScoped создавался / уничтожался несколько раз за один запрос - PullRequest
3 голосов
/ 02 апреля 2012

Я наблюдаю, что мой bean-компонент requestScoped, описанный ниже, создается несколько раз за один запрос.Каждый раз, когда бин восстанавливается, совсем недавно боб был уничтожен, как говорится в журналах.

@ManagedBean(name="namesDirectory")
@RequestScoped
public class NamesDirectory {

    public static NamesDirectory getCurrentInstance(){
        FacesContext context = FacesContext.getCurrentInstance();            
        return context.getApplication().evaluateExpressionGet(context, "#{namesDirectory}", NamesDirectory.class);
    }

    @PostConstruct
    public void foo(){
        Easy.log("bean created");
    }

    @PreDestroy
    public void foo1(){
        Easy.log("bean destroyed");
    }

}

В чем может быть причина того, что бин уничтожается перед обработкой единственногозапрос завершен, и как мне позаботиться о том, чтобы это не происходило?


Редактировать:

У меня было <p:graphicImage url="#" /> в некоторых местах в моем коде Facelets, которые вызывали запросысрабатывает несколько раз.После их удаления я все еще вижу этот запрос созданным, но всего два раза, когда раньше он был много раз.

На самом деле я вижу это при попытке войти в мое приложение.Таким образом, после предоставления учетных данных и их проверки создается экземпляр компонента и используется его компонент, но именно после этого пользователь перемещается на страницу успешного входа в систему, и при создании которой компонент снова необходим, поэтому он создается как есть.не существуетЭто приводит к тому, что bean-объект области видимости запроса создается 2 раза, поскольку, как я считаю, это всего лишь один запрос.

1 Ответ

1 голос
/ 03 апреля 2012

Ваш логин, вероятно, перенаправляет браузер на новую страницу с заголовком Location:, что очень нормально. Таким образом, вы должны ожидать два запроса и, следовательно, два bean-объекта в области запросов Аналогично, как вы заметили, связанные изображения вызывают другой запрос браузера. Это просто, как работает веб. Если это вас сильно беспокоит, вы можете использовать другую область действия (например, сеанс, то есть один компонент на каждого вошедшего в систему пользователя), но будьте осторожны с просмотром вкладок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...