что такое боб области видимости и когда его использовать - PullRequest
13 голосов
/ 21 июня 2010

Может ли кто-нибудь объяснить, что такое ни одна область видимости, и ее цель?

Предположим, если у меня есть bean-компонент в

request scope as r1

session scope as s1

application scope a1

, и скажу, что я не внедряю ни один компонент вида n1 в каждую извыше областей, тогда я нахожу, что n1 получает экземпляр для каждого родительского компонента, когда когда-либо создается его родительский компонент [r1 / s1 / a1].

ни один компонент области действия в a1 не доступен повсюду в a1, так как a1 является областью применения.ни один из компонентов в s1 не доступен только до тех пор, пока s1 не будет уничтожен, и когда s1 будет создан снова, n1 будет создан и доступен для него.

Правильно ли это?

и какова цель использованияЭто?только чтобы не создавать такой боб для себя?

большое спасибо

Ответы [ 3 ]

19 голосов
/ 21 июня 2010

Бин с аннотацией <managed-bean-scope> из none или @NoneScoped будет создаваться для каждого выражения EL, ссылающегося на бин.JSF нигде не хранится.Вызывающая сторона должна сохранить оцененную ссылку сама, если это необходимо.

Например, следующее в представлении

<p>#{noneScopedBean.someProperty}</p>
<p>#{noneScopedBean.someProperty}</p>
<p>#{noneScopedBean.someProperty}</p>

для bean-объекта без области действия создаст bean-компонент 3 (три) раза во время запроса.Каждый доступ к bean-компоненту дает совершенно отдельный bean-компонент, который используется сразу после доступа к свойству.

Однако следующее, например, в bean-объекте области действия

@ManagedProperty("#{noneScopedBean}")
private NoneScopedBean noneScopedBean;

сделаетжить до тех пор, пока экземпляр bean-объекта ограничен сессией.Вы должны убедиться, что вы получаете доступ к нему в представлении только с помощью #{sessionScopedBean.noneScopedBean.someProperty}.

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

7 голосов
/ 10 октября 2012

Я использую @nonescoped, когда моя «логика просмотра» не должна находиться в какой-либо области видимости, но на нее должен ссылаться другой ManagedBean.

Я работаю с Liferay, так как я хочу сделать свою архитектуру и дизайн независимыми от liferay, я создаю свои интерфейсы служб и Dto, но когда вам нужно сохранить данные, Liferay нужно, чтобы companyId и companyGroupId были отправлены слой представления (в данном случае JSF).

Чтобы сохранить независимость, я создал «шаблон адаптера», создав ServiceLayer ManagedBean с @noneScope с интерфейсом, независимым от Liferay. Таким образом, я могу получить companyId и companyGroupId, необходимые для Liferay Apis.

Преимущество использования @noneScope заключается в том, что вы можете использовать его как @ManagedProperty в любом компоненте любой области действия.

0 голосов
/ 10 января 2015

@ NoneScoped был бы полезен в следующем сценарии.

Предположим, что нам нужно внедрить один и тот же bean-компонент в два разных bean-объекта scoped, мы можем пометить этот bean-компонент как @NoneScoped.Скажем, bean-компонент beanOne с @NoneScoped можно легко внедрить в любой bean-компонент с любой областью действия, например @Request или @ Session.

Без использования @NoneScoped для BeanOne нам, возможно, придется дублировать bean-компонент с различными областями действия и внедрить ихсоответственно.

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