0

我正在使用 CDI (Weld),我遇到了一个问题,希望您能提供帮助。我有一系列 Primefaces selectOneMenu,其中一个中选择的值用于填充下一个。问题是,我需要在我的 ManagedBean 上使用 SessionScoped 来获取已选择项目的值。我知道 JSF 的 ViewScoped 在这种情况下会很有帮助,但由于我使用的是 CDI,所以这不是一个选项。接缝也不是一种选择。有一种解决方法可以使用,例如,RequestScoped,或者我真的需要在我的 bean 上使用 SessionScoped?

谢谢!

4

3 回答 3

2

没有什么可以阻止您同时使用 JSF 托管 bean 和 CDI bean。例如,您可以将一个@javax.faces.bean.ViewScoped @javax.faces.bean.ManagedBean@javax.inject.InjectCDI bean 放入其中。因此,如果视图范围适合解决问题,请继续使用它。我已经使用库存的 GlassFish 3.1.2 服务器 (JSF 2.1) 对此进行了测试。

另一种选择是使用 CDI @javax.enterprise.context.ConversationScopedhttp://docs.jboss.org/weld/reference/1.1.0.Final/en-US/html/scopescontexts.html#d0e1841)。这在涉及一系列请求/视图的场景中效果最佳,这些请求/视图具有明确定义的起点和终点,您可以在其中开始和结束对话。

于 2012-05-24T17:57:43.513 回答
1

查看 MyFaces CODI 的 ViewScope 或创建您自己的 ViewScope 的 CDI impl :)

于 2012-05-25T03:09:18.240 回答
0

仅使用 CDI 扩展来创建您自己的范围,因为您的 bean 在 facescontext viewroot 映射中的 ajax 回调期间保持活动状态,因此请查看此链接:http ://www.verborgh.be/articles/2010/01/06/porting -the-viewscoped-jsf-annotation-to-cdi/

于 2013-04-28T22:15:57.423 回答