JSF注入会话范围bean';s方法调用变为空指针

JSF注入会话范围bean';s方法调用变为空指针,jsf,session,nullpointerexception,cdi,session-scope,Jsf,Session,Nullpointerexception,Cdi,Session Scope,我使用CDI注释bean。一个名为SessionManager的bean保存登录的用户信息和声明: import javax.enterprise.context.SessionScoped; import javax.inject.Named; import javax.ejb.Stateful; @Stateful @Named @SessionScoped public class SessionManagerImpl implements SessionManager, Seriali

我使用CDI注释bean。一个名为SessionManager的bean保存登录的用户信息和声明:

import javax.enterprise.context.SessionScoped;
import javax.inject.Named;
import javax.ejb.Stateful;

@Stateful
@Named
@SessionScoped
public class SessionManagerImpl implements SessionManager, Serializable {
    ...
    public UserDto getLoginedUser() {
        ...
    }
}
另一个称为DashboardController,如下所示:

import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
import javax.inject.Inject;

@Named
@RequestScoped
public class DashboardController implements Serializable {

    @Inject
    private SessionManager sessionManager;
    ...
    public void loadUserInfo() {
        ...
        UserDto userDto = sessionManager.getLoginedUser();
    }
}
第一次打开DashboardController页面时,它运行良好。如果我继续使用这个网站,它仍然有效。但是,如果我在几分钟内没有单击任何页面,然后返回打开该页面,它将显示javassist$$getLoginedUser方法调用的空指针(当我使用debug监视时,sessionManager不为空)。会话仍然有效,因为我可以直接使用faces上下文从会话映射中获取值


会话管理器有什么问题?谢谢。

发生这种情况是因为您的有状态会话Bean(EJB)已被钝化,并且没有重新引入会话。如果不需要将会话范围的对象设置为会话bean,我只需要将其设置为会话范围的托管bean。

我认为您混淆了一些基本概念,导致了灾难。我建议仔细阅读下面的答案,以了解其中一个和另一个:和@BalusC谢谢你的解释!我将有状态会话与web会话混合使用。