Какова область управляемых компонентов по умолчанию в приложении JSF 2?

Обычно областью по умолчанию является область запроса. Я пытался удалить аннотацию области действия и ожидал, что у компонента будет поведение scopped bean-объекта запроса (возвращая отправленное значение на предыдущей странице, я помню, что пробовал это в прошлом, и это работало нормально), но у меня ничего не получилось язык выражения привязан к нему. Так какова область действия по умолчанию и почему это не то же самое поведение?!

1 ответ

Решение

Зависит от того, кто управляет бобом.

Если это JSF через @ManagedBean то по умолчанию @RequestScoped Как уже упоминалось в Javadoc:

Если аннотации области действия опущены, боб должен обрабатываться так, как если бы RequestScoped аннотация присутствует

Если это CDI через @Named то по умолчанию @Dependent, как указано в документации по сварке:

Наконец, CDI имеет так называемый зависимый псевдоскоп. Это область по умолчанию для компонента, который явно не объявляет тип области.

В результате экземпляр bean-компонента создается заново для каждого выражения EL. Итак, представьте форму входа в систему с двумя полями ввода, относящимися к свойству bean-компонента, и командную кнопку, относящуюся к действию bean-компонента, то есть, в общей сложности, с тремя выражениями EL, тогда фактически будут созданы три экземпляра. Один с установленным именем пользователя, один с установленным паролем и один, для которого вызывается действие. По сути, это ведет себя так же, как JSF @NoneScoped, Это подтверждает симптомы, которые вы видите.

Если это весна через @Component то по умолчанию @Scope("singleton"), как уже упоминалось в Javadoc:

По умолчанию: "singleton"

По сути, это ведет себя так же, как JSF @ApplicationScoped и CDI @ApplicationScoped,

Netbeans не имеет к этому никакого отношения. Это просто инструмент для редактирования, такой как блокнот, но с более чем 1000 дополнительными функциями.

Смотрите также:

Другие вопросы по тегам