Что такое безобъектный боб и когда его использовать?

Могут ли некоторые объяснить, что такое "бесполезный" и какова его цель?

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

request scope as r1

session scope as s1

application scope a1

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

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

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

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

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

3 ответа

Решение

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

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

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

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

Тем не менее, в следующем примере, например, сессионный компонент

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам