Что такое безобъектный боб и когда его использовать?
Могут ли некоторые объяснить, что такое "бесполезный" и какова его цель?
Предположим, если у меня есть боб в
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-компонент с разными областями действия и соответствующим образом внедрить его.