簡體   English   中英

JSF注入了sessionscoped bean的方法調用成為空指針

[英]JSF injected sessionscoped bean's method invocation become null pointer

我使用CDI注釋豆。 一個名為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上下文從會話映射中獲取值。

SessionManager怎么了? 謝謝。

發生這種情況是因為您的狀態會話Bean(EJB)已被鈍化,並且沒有重新引入您的會話中。 如果沒有必要將您的會話范圍對象設置為會話bean,那么我就將其設為SessionScoped托管bean。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM