我的理解是
@Stateful
@ConversationScoped
是允许的,并且是正常使用。
使用新的JSF 2.2 ViewScoped(javax.faces.view.ViewScoped)注释,记录为与CDI范围注释完全兼容,这是否意味着:
@Stateful
@ViewScoped
是否可行?
答案 0 :(得分: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,它曾经花了我一段时间才找到问题。
There's a nice example.
答案 1 :(得分:0)
请记住,对于@stateful,每次注入它都会得到一个新的具体实例,因为你指的是用该注释存储状态。会话的EJB层概念与会话的JSF层概念不同,两者混淆可能会为您创建各种问题。
JSF会话绑定到由cookie或URL重写(容器配置)维护的特定客户端。
EJB会话与特定方法执行(@Stateless)或具体实例(@Stateful)相关联。
除非您需要在EJB中进行持久的序列化和状态维护,否则有状态不会让您想要。你最好的选择是将事务方面分成@Stateless,并将你的状态存储在一个传递给@Stateless方法的@ViewScoped中。