【问题标题】:JSF Managed bean and managed property both necessary?JSF 托管 bean 和托管属性都需要吗?
【发布时间】:2013-12-23 15:31:16
【问题描述】:

我是 JSF 的新手,想知道:

如果我有一个控制器来处理给定页面的所有工作,并且有一个 bean 来保存所述页面的所有数据,是否有必要同时拥有

@ManagedProperty(value="#{myBean}") 

控制器上的注释和

@ManagedBean(name="myBean")
@SessionScoped

表单 bean 上的注释?

【问题讨论】:

    标签: jsf managed-bean managed-property


    【解决方案1】:

    JSF 中的托管 bean 用于存储网页的状态。 JSF 实现负责创建和丢弃 bean 对象(因此命名为托管 bean)。

    对于您编写的每个@ManagedBean 类,当 JSF 实现检测到使用该名称的 bean 时,将创建 bean 对象(您可以指定 bean 名称或将其留给 JSF 以使用默认值) name-class 名称的第一个字符更改为小写)。创建的对象放置在指定范围的映射中。每个范围都有一个映射,用于存储指定范围的 bean 对象。

    现在,如果您需要控制器中这些 bean 的值,则必须使用 ManagedProperty 注释将其注入。请注意,您需要为控制器提供 managedProperty 的 setter 方法。

    所以要回答您的问题,需要 managedBean 注释来告诉 JSF 实现管理 bean 实例并将值存储在特定于会话范围的表中。并且需要 ManagedProperty 注释来使用存储在当前会话中的 bean,以便您可以访问它的所有值。

    【讨论】:

      【解决方案2】:

      我们使用@ManagedBean 注解将Java bean 注册到JSF 框架。这是 faces-config.xml <managed-bean> 元素的替代品。我们通常不使用name 属性,因为它已经默认为简单的类名骆驼大小写。

      我们使用@RequestScope 和其他范围注解通过注解明确指定我们想要的范围。这相当于指定<managed-bean-scope> xml 条目。如果不指定范围,则默认为@NoneScoped。

      我们使用@ManagedProperty 并在其value 属性中指定一个EL 表达式,以便将JSF 提供的依赖注入引擎用于JSF 工件,例如具有更广泛范围的其他托管bean 和EL 定义的变量(如param)。如果我们需要其他 JSF 工件(最典型的是 bean)中的注入值,我们会这样做。注入的值在 bean 的 @PostConstruct-annotated 方法中可用。这是<managed-property> xml 条目的替代方法。

      总结一下。使用@ManagedBean @RequestScoped 向JSF 框架注册一个bean。在此 bean 中使用 @ManagedProperty 以便能够在此 bean 中引用具有相同或更广泛范围的其他 JSF bean。如果您不需要在创建的 bean 中引用其他 bean,则不需要使用 @ManagedProperty 注释,因为它完全是可选的。

      【讨论】:

      • 感谢您的信息,但这并不能回答我的问题,现在我对@ManagedProperty 有点困惑
      猜你喜欢
      • 1970-01-01
      • 2011-07-10
      • 2012-06-30
      • 2011-12-05
      • 1970-01-01
      • 2012-10-13
      • 1970-01-01
      • 2015-03-11
      • 1970-01-01
      相关资源
      最近更新 更多