Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否允许同时使用@Stateful和@javax.faces.view.viewscope?_Java_Jsf_Cdi_Jsf 2.2_Ejb 3.2 - Fatal编程技术网

是否允许同时使用@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——我特别质疑组合使用这两个注释的可行性。