JSF2.0 Tomcat7中@Named和@ManagedBean注解的区别[重复]

Posted

技术标签:

【中文标题】JSF2.0 Tomcat7中@Named和@ManagedBean注解的区别[重复]【英文标题】:Difference between @Named and @ManagedBean annotations in JSF2.0 Tomcat7 [duplicate] 【发布时间】:2012-06-15 04:30:14 【问题描述】:

这可能是一个菜鸟问题,但是在很多教程和示例中,我看到这些注释的使用就像它们做同样的事情一样。

但是,我在使用 @Named 时遇到了一些限制(尤其是依赖注入等)。我找不到解释差异的来源,如果有人能大致介绍一下,我将非常感激何时使用其中一种。

【问题讨论】:

有哪些限制? @ManagedBean@Named 功能的子集,因此@Named 应该可以在任何地方使用。 【参考方案1】:

@Named 为 CDI 托管 bean 提供一个 EL 名称,以便在 JSF 或 JSP 等视图技术中使用。请注意,在 CDI 应用程序中,您不需要需要 @Named 注释来创建由 CDI 管理的 bean(感谢 @Karl 的评论)。

@ManagedBean 使 bean 由 JSF 管理,你可以:

将其注入到其他 @ManagedBean 注释的 bean 中(但不注入到 @Named bean 中!) 通过表达式语言从您的视图中访问它

请参阅此related question 了解更多信息,这两种 bean 之间的注入是如何工作的。

请注意,bean 的范围也有所不同。它们来自不同的包,但名称相同(JSF:javax.faces.bean,CDI:javax.enterprise.context,因此如果包含错误的类,通常会导致错误和混乱。

根据我的经验:您应该尽可能使用 CDI bean,因为它们比 JSF 托管 bean 更灵活。 唯一的缺点是 CDI 不知道视图范围,因此您要么需要回退到 @ManagedBean 要么使用诸如 Seam 之类的第三方扩展。

编辑:CDI 支持 ViewScope,更多信息请参见 LINK

【讨论】:

+1。 @matt:我认为RequestScoped + KeepAlive = ViewScoped 也可以与@Named 一起使用。我说的对吗? @Abhinav:来自 Richfaces 等组件库的 KeepAlive? 非常感谢您的解释! @matt: 在richfaces3.3.3 和JSF2.0 中是的,我使用keepalive 和请求范围。 现在您可以通过导入 javax.faces.view.ViewScopedviewScope 用于 CDI bean。 ***.com/questions/14384369/…

以上是关于JSF2.0 Tomcat7中@Named和@ManagedBean注解的区别[重复]的主要内容,如果未能解决你的问题,请参考以下文章

@Named + @RequestScoped 在 JSF 2.0 和 JBoss 7.1.1 中不起作用

JSF 资源版本控制

Richfaces 4 组件不渲染

使用 JSF2.0 和 Primefaces 3.4 进行导航

未找到 JSF2.0 标记

如何处理数据库中用户的身份验证/授权?