1

关于将 JSF 与 EJB3.1 结合使用时的各种选项和最佳实践,我有几个问题。考虑到可用的选择和组合数量之多,我所拥有的心智模型远非清晰,因此有些问题可能没有意义。

JSF/Facelets通过与bean类中使用的实际注释无关的 EL 代码(javax.faces.bean .* 或 javax.enterprise.context.*)。

是否可以通过更改 bean 类中的导入而不对 Facelets xhtml代码进行任何更改来在JSFCDI范围注释之间切换?

JSF/Facelets 是否应该只用于xhtml标记代码,所有范围和生命周期(加上注入)注释都是使用CDI完成的,这是一种既定的模式吗?

JBoss AS设置中,JSF 支持 bean 的生命周期管理(使用JSFCDI注释)在哪里进行?在 Web 容器中还是在 EJB3 容器中?

在一个典型的 Web 应用程序中,考虑到SessionScoped bean 可以由 CDI 提供,是否需要使用除@Entity类型之外的 EJB3 bean ,例如,当信息要持久保存在每个“流”中的最后一个典型步骤时数据库?

4

1 回答 1

3

是否可以通过更改 bean 类中的导入而不对 Facelets xhtml 代码进行任何更改来在 JSF 和 CDI 范围注释之间切换?

是的。


JSF/Facelets 是否应该只用于 xhtml 标记代码,所有范围和生命周期(加上注入)注释都是使用 CDI 完成的,这是一种既定的模式吗?

JSF 正在向 CDI 发展。@FlowScoped即将推出的JSF 2.2的新注释就是证明,因为它从 CDI API 扩展而来。唯一的缺点是 CDI 没有为非常有用的 JSF 注释提供标准@ViewScoped注释。您需要@ConversationScoped手动开始和结束对话,或者查看像MyFaces CODI这样的 CDI 扩展。


在 JBoss AS 设置中,JSF 支持 bean 的生命周期管理(使用 JSF 或 CDI 注释)在哪里进行?在 Web 容器中还是在 EJB3 容器中?

Web 容器(类似于 WAR)。JSF 建立在Servlet API之上,因此它绝对是 Web 容器。


在一个典型的 Web 应用程序中,考虑到 SessionScoped bean 可以由 CDI 提供,是否需要使用除 @Entity 类型之外的 EJB3 bean,例如,当信息要持久保存在每个“流”中的最后一个典型步骤时数据库?

@Entity是 JPA 的一部分,而不是 EJB 的一部分。用于映射到数据库表的@Entity模型类,通常仅用于跨层传输数据。您最后描述的内容听起来像是@StatefulEJB 的候选人。要更好地理解@Stateless@StatefulEJB 的对比,请参阅以下详细答案:JSF request scoped bean keep recreating new Stateful session beans on each request?

于 2012-06-25T22:48:11.923 回答