有人可以解释什么是无范围和目的吗?
假设我有一个豆子
request scope as r1
session scope as s1
application scope a1
Run Code Online (Sandbox Code Playgroud)
并且说我没有将范围bean n1注入到上述每个范围中,然后我发现当实例化其父bean [r1/s1/a1]时,n1将被实例化为每个父bean.
a1中的无范围bean在a1中始终可用,因为a1是appl范围.s1中的无范围bean仅在s1未被销毁之后才可用,并且当再次创建s1时,n1将被实例化并且可用于它.
这是对的吗?
和使用它的目的是什么?只是为了避免创造这样的豆我们自己?
非常感谢
Bal*_*usC 20
用一个bean <managed-bean-scope>
的none
或@NoneScoped
注释将在每一个EL表达式引用豆来创建.它没有被JSF存储在任何地方.如有必要,调用者必须自己存储已评估的引用.
例如,视图中的以下内容
<p>#{noneScopedBean.someProperty}</p>
<p>#{noneScopedBean.someProperty}</p>
<p>#{noneScopedBean.someProperty}</p>
Run Code Online (Sandbox Code Playgroud)
在一个无范围的bean上,在请求期间将构造 bean 3(三次).每次访问bean都会提供一个完全独立的bean,它在访问属性后立即被使用.
但是,以下是例如会话范围的bean
@ManagedProperty("#{noneScopedBean}")
private NoneScopedBean noneScopedBean;
Run Code Online (Sandbox Code Playgroud)
只要会话作用域bean实例,它将使它生效.您应该只确保在视图中访问它#{sessionScopedBean.noneScopedBean.someProperty}
.
因此,当您希望无范围数据作为任意bean中的托管属性可用时,它可能很有用.
小智 7
当我的"视图逻辑"不需要在任何范围内但被另一个ManagedBean引用时,我正在使用@nonescoped.
我正在与Liferay合作,因为我想让我的架构和设计独立于liferay,我创建了我的服务接口和Dto,但是当你需要持久性数据时,Liferay需要从视图层发出companyId和companyGroupId(在这种情况下JSF).
为了保持独立性,我做了一个"适配器模式",使用@noneScope创建一个ServiceLayer ManagedBean,其接口独立于Liferay.通过这种方式,我可以获得Liferay Apis所需的companyId和companyGroupId.
使用@noneScope的优点是您可以在任何范围的任何bean中将其用作@ManagedProperty.
归档时间: |
|
查看次数: |
7073 次 |
最近记录: |