Какова область управляемых компонентов по умолчанию в приложении 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 дополнительными функциями.