что такое none scope bean и когда его использовать?

могут ли некоторые объяснить, что такое область none и ее цель?

предположим, если у меня фасоль в

request scope as r1

session scope as s1

application scope a1

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

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

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

и какова цель его использования? только для того, чтобы не создавать таких бобов самим?

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

3 ответов


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

Е. Г. следующей в вид

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

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

однако, следующее, например, в сеансе scoped bean

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

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

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


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

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

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

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


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

предположим, что мы должны ввести один и тот же Боб в двух разных бобах, мы можем отметить этот боб как @NoneScoped. Сказать BeanOne фасоли с @NoneScoped может быть легко введен в любой фасоли с любыми объемами, как @просьбе или @сессии.

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