是否可以在运行时切换bean的范围?

时间:2013-02-04 05:42:16

标签: jsf-2 controller javabeans

我正在使用JSF 2.0来构建应用程序。 我想做的是取决于用户是否勾选了复选框,我希望将bean的范围从请求更改为会话..这可能吗?

或勾选复选框后,使用请求范围覆盖默认的“会话”范围...

我尝试了很多研究,但我甚至不确定这是否可行。

感谢。

1 个答案:

答案 0 :(得分:1)

在运行时期间无法更改托管bean的范围。但是,您可以在运行时轻松更改bean的行为。

E.g。

@ManagedBean
@RequestScoped
public class MultiScopedBean {

    @ManagedProperty("#{requestScopedBean}")
    private RequestScopedBean requestScopedBean;

    @ManagedProperty("#{sessionScopedBean}")
    private SessionScopedBean sessionScopedBean;

    private boolean sessionScoped; // Bind this to the checkbox.

    // ...

    public Object getSomeProperty() {
        if (sessionScoped) {
            return sessionScopedBean.getSomeProperty();
        } else {
            return requestScopedBean.getSomeProperty();
        }
    }

    public void setSomeProperty(Object someProperty) {
        if (sessionScoped) {
            sessionScopedBean.setSomeProperty(someProperty);
        } else {
            requestScopedBean.setSomeProperty(someProperty);
        }
    }

    // ...
}

是的,它最终会出现在一些模板中,但这就是你得到的奇怪要求。