0

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

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

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

谢谢。

4

1 回答 1

1

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

例如

@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);
        }
    }

    // ...
}

是的,它最终会变成一些样板文件,但这就是你得到这样一个奇怪的要求的结果。

于 2013-02-04T12:57:34.110 回答