1

我的理解是

@Stateful
@ConversationScoped 

是允许的,并且是正常使用。

使用新的 JSF 2.2 ViewScoped (javax.faces.view.ViewScoped) 注释,它被记录为与 CDI 范围注释完全兼容,这是否意味着:

@Stateful
@ViewScoped

是可行的组合吗?

4

2 回答 2

0

请记住,使用@stateful,每次注入它时,您都会得到一个新的具体实例,因为您使用该注释指示存储状态。此外,EJB 层的 session 概念与 JSF 层的 session 概念不同,混淆两者会给你带来各种各样的问题。

JSF 会话绑定到由 cookie 或 url 重写(容器配置)维护的特定客户端。

EJB 会话与特定方法执行 (@Stateless) 或具体实例 (@Stateful) 相关联。

除非您需要在 EJB 中进行持久的序列化和状态维护,否则有状态不会给您想要的。最好的办法是将事务方面分离到 @Stateless 中,并将您的状态存储在 @ViewScoped 中,该 @ViewScoped 将传递给 @Stateless 方法。

于 2014-11-01T20:39:08.407 回答
0

@Stateful 是一个 EJB 注释,因此从技术上讲,您的 bean 将是有状态的 EJB bean,而不是 CDI bean。而且它只能在成熟的应用服务器中工作。如果(仅)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 .ViewScoped,我花了一段时间才找到问题。
有一个很好的例子。

于 2014-03-11T15:37:30.110 回答