【问题标题】:JSF injected sessionscoped bean's method invocation become null pointerJSF 注入 sessionscoped bean 的方法调用变成空指针
【发布时间】:2013-08-30 12:14:00
【问题描述】:

我使用 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 方法调用的空指针(当我使用调试观看时 sessionManager 不为空)。会话仍然有效,因为我可以直接使用 faces 上下文从会话映射中获取值。

SessionManager 有什么问题?谢谢。

【问题讨论】:

标签: jsf session nullpointerexception cdi session-scope


【解决方案1】:

这是因为您的有状态会话 Bean (EJB) 已钝化,并且没有重新引入您的会话。如果没有强烈需要将会话作用域对象设为会话 bean,我只需将其设为 SessionScoped 托管 bean。

【讨论】:

    猜你喜欢
    • 2016-08-02
    • 1970-01-01
    • 2012-04-09
    • 2019-06-04
    • 2014-10-20
    • 1970-01-01
    • 2015-08-29
    • 2019-08-04
    • 1970-01-01
    相关资源
    最近更新 更多