我正在使用 JSF 2.0 构建应用程序。我想做的是取决于用户是否勾选了复选框,我希望将bean的范围从请求更改为会话..这可能吗?
或者在勾选复选框时使用请求范围覆盖默认的“会话”范围......
我尝试了很多研究,但我什至不确定这是否可能。
谢谢。
我正在使用 JSF 2.0 构建应用程序。我想做的是取决于用户是否勾选了复选框,我希望将bean的范围从请求更改为会话..这可能吗?
或者在勾选复选框时使用请求范围覆盖默认的“会话”范围......
我尝试了很多研究,但我什至不确定这是否可能。
谢谢。
在运行时无法更改托管 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);
}
}
// ...
}
是的,它最终会变成一些样板文件,但这就是你得到这样一个奇怪的要求的结果。