正确从上下文检索另一个bean实例的方法
-
13-10-2019 - |
题
我们正在使用以下代码从上下文中获取托管BEAN实例。
FacesUtils.getManagedBean("beanName");
这是正确的方法吗?如果多个用户访问相同的bean会发生什么?豆实例如何管理?
解决方案
自从 FacesUtils
不是标准JSF实施的一部分,目前尚不清楚其在封面下实际在做什么。
无论如何 已经 在托管的Bean内部,首选的方法是将另一个Bean注入托管属性。我假设您已经在JSF 2.0上,所以这里是JSF 2.0的目标示例。
@ManagedBean
@SessionScoped
public void OtherBean {}
@ManagedBean
@RequestScoped
public void YourBean {
@ManagedProperty("#{otherBean}")
private void OtherBean;
@PostConstruct
public void init() {
otherBean.doSomething(); // OtherBean is now available in any method.
}
public void setOtherBean(OtherBean otherBean) {
this.otherBean = otherBean;
}
// Getter is not necessary.
}
但是当您仍在JSF 1.X上时,您需要通过 <managed-property>
进入 faces-config.xml
如这个问题所述: 传递托管豆之间的数据.
如果您碰巧使用CDI @Named
而不是JSF @ManagedBean
, , 利用 @Inject
代替 @ManagedProperty
. 。为此,不需要设置器方法。
也可以看看:
至于你的关心
如果多个用户访问相同的bean会发生什么?豆实例如何管理?
它们由JSF管理。如果找到豆子,则JSF将完全返回此豆。如果找不到bean,那么JSF将自动创建一个并放入相关的范围。 JSF不会不必要地创建多个豆类。
不隶属于 StackOverflow