JSF2 ManagedBeans生命周期

时间:2010-09-16 08:33:06

标签: jsf jsf-2

我有一个关于JSF及其ManagedBeans的基本问题。想象一下,我们设置了一个ManagedBean,它只包含我视图中的数据:

@ManagedBean(name = "dataBean")
@SessionScoped
public class DataBean {

接下来是我的控制器,它使用依赖注入将控制器与模型连接:

@ManagedBean
@RequestScoped
public class Controller {
  @ManagedProperty(value = "#{dataBean}")
  private DataBean dataBean;

现在让我们考虑一个控制器中的几个managedBeans:是否可以将另一个ManagedBean注入控制器,如:

@ManagedProperty(value = "#{dataBean}")
private DataBean dataBean;
@ManagedProperty(value = "#{dataBean}")
private DataBean dataBean2;

如果是这样,JSF如何知道bean属于什么.xhtml页面?


此刻我很困惑: - /因为我的代码有问题......但首先我应该清楚地理解它

干杯...

增加:

假设我想从两个控制器中访问相同的managedBean(sessionScoped)。我可以轻松地说:

@ManagedBean
@RequestScoped
public class Controller {
  @ManagedProperty(value = "#{dataBean}")
  private DataBean dataBean;
...
@ManagedBean
@RequestScoped
public class Controller2 {
  @ManagedProperty(value = "#{dataBean}")
  private DataBean dataBean;

我有相同的DataBean实例吗?

1 个答案:

答案 0 :(得分:1)

此代码:

@ManagedProperty(value = "#{dataBean}")
private DataBean dataBean;
@ManagedProperty(value = "#{dataBean}")
private DataBean dataBean2;

将在dataBeandataBean2中注入相同的实例。只有一个#{dataBean}

添加(回答问题补充:))

是的,如果dataBean@SessionScoped,则在两个控制器中都会获得相同的DataBean。当前会话中只有一个。