是否允许同时使用@Stateful和@javax.faces.view.viewscope?
我的理解是是否允许同时使用@Stateful和@javax.faces.view.viewscope?,java,jsf,cdi,jsf-2.2,ejb-3.2,Java,Jsf,Cdi,Jsf 2.2,Ejb 3.2,我的理解是 @Stateful @ConversationScoped 是允许的,并且是正常使用 有了新的JSF 2.2 ViewScope(javax.faces.view.ViewScope)注释(已被证明与CDI范围注释完全兼容),这是否意味着: @Stateful @ViewScoped 是一个可行的组合吗?@Stateful是一个EJB注释,因此从技术上讲,您的bean将是一个有状态EJB bean,而不是CDIBean。而且它只能在成熟的应用服务器上工作。 如果(仅)使用JSF
@Stateful
@ConversationScoped
是允许的,并且是正常使用
有了新的JSF 2.2 ViewScope(javax.faces.view.ViewScope)注释(已被证明与CDI范围注释完全兼容),这是否意味着:
@Stateful
@ViewScoped
是一个可行的组合吗?@Stateful是一个EJB注释,因此从技术上讲,您的bean将是一个有状态EJB bean,而不是CDIBean。而且它只能在成熟的应用服务器上工作。 如果(仅)使用JSF 2.2+CDI,请使用:
@javax.inject.Named // to expose a bean in the EL context
@javax.faces.view.ViewScoped // to make it view scoped
另外,不要将后一个注释与@javax.faces混淆。bean.viewscope,我曾经花了一段时间才找到问题。请记住,使用@stateful时,每次注入它时都会得到一个新的具体实例,因为您用该注释指示存储状态。另外,会话的EJB层概念与会话的JSF层概念不同,混淆两者会给您带来各种各样的问题 JSF会话绑定到通过cookie或url重写(容器配置)维护的特定客户机 EJB会话绑定到特定的方法执行(@Stateless)或具体实例(@Stateful)
除非您需要在EJB中进行持久的序列化和状态维护,否则stateful不会提供您想要的。您最好将事务方面分离为@Stateless,并将您的状态存储在@ViewScoped中,该@ViewScoped被传递到@Stateless方法中。从技术上讲,所有EJB bean都是CDI bean;-)我使用的是一个完整的应用服务器。我想我在问题中提到过,我指的是javax.faces.view.ViewScoped——我特别质疑组合使用这两个注释的可行性。