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 管理,你可以:
请参阅此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.ViewScoped 将 viewScope 用于 CDI bean。 ***.com/questions/14384369/…以上是关于JSF2.0 Tomcat7中@Named和@ManagedBean注解的区别[重复]的主要内容,如果未能解决你的问题,请参考以下文章
@Named + @RequestScoped 在 JSF 2.0 和 JBoss 7.1.1 中不起作用