Jsf CDI SessionScoped bean在SessionMap中不可用

Jsf CDI SessionScoped bean在SessionMap中不可用,jsf,cdi,tomcat9,web-deployment-project,Jsf,Cdi,Tomcat9,Web Deployment Project,在类声明之前使用@Named(“XYZ”)和@SessionScoped创建会话Bean,但这些Bean不存储在会话映射中 会话映射被选中为 final FacesContext context=FacesContext.getCurrentInstance(); 对象obj context.getExternalContext().getSessionMap().get(“XYZ”) 当我像这样在faces-config.xml中放置一个JSF管理的会话bean时 <managed-

在类声明之前使用@Named(“XYZ”)和@SessionScoped创建会话Bean,但这些Bean不存储在会话映射中

会话映射被选中为

final FacesContext context=FacesContext.getCurrentInstance(); 对象obj context.getExternalContext().getSessionMap().get(“XYZ”)

当我像这样在faces-config.xml中放置一个JSF管理的会话bean时

  <managed-bean>
    <managed-bean-name>XYZ</managed-bean-name>
    <managed-bean-class>blah.blah.XYZ</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
  </managed-bean>

XYZ
诸如此类
一场
我觉得很好

CDIBean似乎没有存储在会话映射中


注意:bean.xml存在于我的项目中。

这是否适用于以前版本的Tomcat?为什么要用这种方式检索bean呢?我之前没有使用CDI。当我遇到这个问题时,我刚刚将我的项目升级到了最新的JSF。另请参阅它的回答,因为它建议使用
@Inject
来获取bean。如果纯粹的检索不是你的问题,但是你需要做一些事情,如果你注射了它,你就不能做,那么你应该在问题中说明这一点,因为它是一个重要的部分。我发布的第二个链接有额外的信息,如果你需要做些什么的话。相反,这有很多特别之处。你为什么要从sessionmap上读这样一个bean呢。我从来没有这样做过。查看我发布的其他链接。。。