Что не имеет области bean и когда его использовать?

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

Предположим, что если у bean в

request scope as r1

session scope as s1

application scope a1

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

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

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

и какова цель его использования? только чтобы избежать создания такого bean нашего самоуправления?

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

Ответ 1

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

например. в представлении

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

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

Однако, например, в области сеанса bean

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

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

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

Ответ 2

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

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

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

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

Ответ 3

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

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

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