Java 如何使用CDI在ajax调用期间保持状态

Java 如何使用CDI在ajax调用期间保持状态,java,cdi,jboss-weld,Java,Cdi,Jboss Weld,我正在使用CDI(焊接),我遇到了一个问题,希望你能帮助我。 我有一系列PrimefacesselectOneMenu,其中一个菜单中选择的值用于填充下一个菜单。问题是,我需要在ManagedBean上使用SessionScoped来获取已选择项的值。我知道JSF的ViewScope在这种情况下会有很大帮助,但因为我使用的是CDI,所以这不是一个选项。Seam也不是一个选项。有一个变通方法可以使用,例如,RequestScoped,或者我真的需要在我的bean上使用SessionScoped 谢

我正在使用CDI(焊接),我遇到了一个问题,希望你能帮助我。 我有一系列Primefaces
selectOneMenu
,其中一个菜单中选择的值用于填充下一个菜单。问题是,我需要在ManagedBean上使用SessionScoped来获取已选择项的值。我知道JSF的ViewScope在这种情况下会有很大帮助,但因为我使用的是CDI,所以这不是一个选项。Seam也不是一个选项。有一个变通方法可以使用,例如,RequestScoped,或者我真的需要在我的bean上使用SessionScoped


谢谢

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


另一个选项是使用CDI的
@javax.enterprise.context.ConversationScope
()。这在涉及一系列请求/视图的场景中效果最好,这些请求/视图具有定义良好的开始点和结束点,您可以在这些场景中开始和结束对话。

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


另一个选项是使用CDI的
@javax.enterprise.context.ConversationScope
()。这在涉及一系列请求/视图的场景中效果最佳,这些请求/视图具有定义良好的开始点和结束点,您可以在这些场景中开始和结束对话。

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

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

只使用CDI扩展创建您自己的范围,因为在facescontext viewroot映射中的ajax回调期间,您的bean保持活动状态
因此,请查看此链接:

仅使用CDI扩展创建您自己的范围,因为您的bean在facescontext viewroot映射中的ajax回调期间保持活动状态
因此,请查看此链接:

不,这不起作用,您将得到该对象的两个实例,一个是JSF创建的,另一个是CDI创建的。在JSF2.2中,这不会是一个问题。JSF2.0是在JSR299(CDI)完成之前完成的,没有进行适当的集成。JSF2(2.1)的MR也没有添加任何CDI集成。如果我使用ViewScoped和ManagedBean,我将无法处理注入其中的其他对象,因为它们不是CDI控制的。LightGuard,我对JSF2.2集成很好奇(在稍后的机会中),它是否可以像Brian说的那样实现?@LightGuard,我没有遇到任何问题。明确地说,我没有在bean上混合JSF和CDI注释。bean被注释为
@viewscope@ManagedBean
,并具有
@Inject
注释字段。我只是在构造函数中设置了一个断点,它只被JSF调用一次,并接收CDIBeans的注入。我可能会意外地使用未指定的行为吗?我正在运行GlassFish 3.1.2(带有Mojarra 2.1.6和Weld 1.1.4)。我想了解这一点。你知道JSF规范针对2.2的一个问题吗?你在使用哪个ManagedBean注释?除非Glassfish做了什么,或者JSF2.1中有什么东西,否则这是唯一能使这项工作成功的东西。@LightGuard问得好。我正在使用javax.faces.bean.ManagedBean。我已经相应地更新了我的答案。也许这是JSF2.1中的一些东西,但我没有找到一个好的2.1更改列表(我找到的没有列出任何明显与此相关的内容)。如果你遇到任何东西,我还是很想看看。不,那不行,你会得到两个对象实例,一个是JSF创建的,另一个是CDI创建的。在JSF2.2中,这不会是一个问题。JSF2.0是在JSR299(CDI)完成之前完成的,没有进行适当的集成。JSF2(2.1)的MR也没有添加任何CDI集成。如果我使用ViewScoped和ManagedBean,我将无法处理注入其中的其他对象,因为它们不是CDI控制的。LightGuard,我对JSF2.2集成很好奇(在稍后的机会中),它是否可以像Brian说的那样实现?@LightGuard,我没有遇到任何问题。明确地说,我没有在bean上混合JSF和CDI注释。bean被注释为
@viewscope@ManagedBean
,并具有
@Inject
注释字段。我只是在构造函数中设置了一个断点,它只被JSF调用一次,并接收CDIBeans的注入。我可能会意外地使用未指定的行为吗?我正在运行GlassFish 3.1.2(带有Mojarra 2.1.6和Weld 1.1.4)。我想了解这一点。你知道JSF规范针对2.2的一个问题吗?你在使用哪个ManagedBean注释?除非Glassfish做了什么,或者JSF2.1中有什么东西,否则这是唯一能使这项工作成功的东西。@LightGuard问得好。我正在使用javax.faces.bean.ManagedBean。我已经相应地更新了我的答案。也许这是JSF2.1中的一些东西,但我没有找到一个好的2.1更改列表(我找到的没有列出任何明显与此相关的内容)。如果你遇到什么,我还是很想看看。是的,我看到了一些关于MyFacesCodi的东西,但是因为我已经混合了太多的东西(JSF、primefaces、richfaces、weld等等),我不想添加新的。但现在看来,这是我最好的选择。我想要som