我们正在使用以下代码从上下文中获取托管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不会不必要地创建多个豆类。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top