![](/img/trans.png)
[英]Instance null after injecting @SessionScoped CDI bean into a JSF @ManagedBean
[英]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.