Что не имеет области 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 с различными областями и вставлять их соответственно.