【问题标题】:jsf2 managed beans multiple scopingjsf2 托管 bean 多个作用域
【发布时间】:2012-09-17 06:30:46
【问题描述】:

假设我们有一个像

@ManagedBean(name = "categoriesbean")
@RequestScoped
public class CategoriesBean { 
      Integer id;
      public Integer getId() { return id;}
      public void setId(Integer idarg) { id = idarg;}
      ...
      ...
}

在同一个应用程序中,我在其他地方

@ManagedBean(name = "categoriesdetailedbean")
@ViewScoped
public class CategoriesDetailedBean extends CategoriesBean { 
      Integer idderived;
      public Integer getIdderived() { return idderived;}
      public void setIdderived(Integer idderivedarg) { idderived = idderivedarg;}
      ...
      ...
}

“categoriesdetailedbean”的范围是什么,以及它的属性(例如 Id 与 Idderived 的范围?)。

我问的原因是,我看到了一些我似乎不太理解的效果。

【问题讨论】:

  • 对不起,我不批评你的问题。我想知道为什么您需要在托管 bean 中进行继承。我建议您在托管 bean 中使用 POJO 类。
  • 定义托管 bean 时,bean 的范围取决于您在类本身上指定的内容,而不是基类。所以categoriesbean 是请求范围,categoriesdetailedbean 是视图范围。你不明白的效果是什么?
  • @erencan:我不明白为什么托管 bean 不能被继承,尤其是当我重用大量基础对象功能时。

标签: jakarta-ee jsf-2 javabeans


【解决方案1】:

类注解是特定于类本身的,当你对它进行子类化时它们会被丢弃。根据 Saldo,您 CategoriesDetailedBean 继承了 getId()setId() 两种方法,仅此而已。它们不会神奇地在不同的范围内运行,也不会保存不同实例的值。

您对具体的功能要求不是很清楚,因此很难为您真正尝试做的事情发布一个合适的答案。但如果我猜对了,您实际上想从托管 bean 中访问不同的托管 bean 实例。如果是这样,那么您可以为此使用@ManagedProperty。或者您可能想要一个主从视图,在这种情况下您不需要相互注入 bean,但最好将详细 ID 作为 GET 请求参数传递并使用<f:viewParam> 进行设置。

另见:

【讨论】:

  • 感谢@BalusC 的回复。不要认为我有足够的空间来详细说明我的具体要求。也许我会在博客上发布并在此处链接,以便您指导我。
猜你喜欢
  • 2011-07-14
  • 2013-02-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-20
  • 2011-10-16
  • 2011-10-07
  • 2012-12-03
  • 2014-09-21
相关资源
最近更新 更多