为什么Java EE 6 CDI缺少@ViewScoped和@FlashScoped注释?(特别是前者让我感到惊讶,因为CDI源于Seam世界,该世界已经了解非常相似的ScopeType.PAGE...)
在使用CDI时,有什么推荐的解决方法?使用Seam 3?
谢谢
在使用CDI时,有什么推荐的解决方法?使用Seam 3?
谢谢
@ViewScoped
是特定于 MVC 框架 JSF,而不是依赖注入框架 CDI。视图作用域的生命周期与您交互的 JSF 视图一样长。CDI 实际上没有“视图”概念。CDI 的替代方案是@ConversationScoped
,它的生命周期比请求范围长,但比会话范围短。必要时,您只需要自己控制终止。您可以使用MyFaces CODI将 JSF @ViewScoped
桥接到 CDI @Named
bean 中。即将推出的 JSF 2.2 将在 javax.faces.view
包中具有与 CDI 兼容的 @ViewScoped
。
@FlashScoped
在 JSF 中不存在。JSF flash scope 基本上是由一个短暂的 cookie 支持的映射,该 cookie 在 HTTP 重定向后仍然存在。您无法让 JSF 将受管 bean 放在此范围内。您必须自己手动将值放入/从映射中获取值,并/或使用 EL 中的 #{flash}
引用,该引用基本上引用了该映射。Seam Faces 已经劫持了 JSF 特定的 javax.faces.bean
包以进行其 @FlashScoped
注释,但这绝对不是标准 JSF API。