我觉得Java EE 6规范有点乱.有几组注释.
我们有javax.ejb类似于@Stateful和@Stateless创建EJB的注释.
还有一个@javax.annotation.ManagedBean用于创建托管bean.
javax.enterprise.context喜欢@SessionScoped和注释中有注释@RequestScoped.
更重要的是也有@ManagedBean和@SessionScoped/ @RequestScoped在注释javax.faces.bean包.
为了使事件更复杂,有一个javax.inject带@Named注释的包.
有人可以描述一下他们之间的关系吗?
我在哪里可以使用@EJB,@Inject或@ManagedPropery注入其他豆类?
我刚开始阅读Core JavaServer Faces,第3版.他们这样说(强调我的):
对于可以在JSF页面中使用的bean,有两种不同的机制,CDI bean和JSF托管bean,这是一个历史事故.我们建议您使用CDI bean,除非您的应用程序必须在像Tomcat这样的普通servlet运行器上运行.
为什么?他们没有提供任何理由.我一直在使用@ManagedBean在GlassFish 3上运行的原型应用程序中的所有bean,我还没有发现任何问题.我不介意迁移@ManagedBean到@Named,但我想知道为什么我应该打扰.
我在JSF 2.2中使用Spring启动.我的问题是我可以创建@ManagedBean,javax.annotation.ManagedBean当我运行应用程序时它在我的index.xhtml中工作,但是当我想使用时javax.faces.bean.ManagedBean不显示值.这两者有什么区别?为什么我不能用 javax.faces.bean.ManagedBean?(我没有web.xml文件,所有都在类中配置)
cdi ×2
java-ee ×2
jsf ×2
java ×1
java-ee-6 ×1
jsf-2 ×1
managed-bean ×1
spring ×1
spring-boot ×1