0
我使用CDI來註釋bean。一個叫豆持有SessionManager與申報logined用戶信息:JSF注入sessionscoped 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有什麼問題?謝謝。
我相信你在混合一些基本概念,導致災難。我建議仔細閱讀下面的答案,以獲得一個和其他直:http://stackoverflow.com/a/13012973和http://stackoverflow.com/a/8889612/ – BalusC
@BalusC謝謝你的解釋!我確實將有狀態會話與Web會話混合在一起。 –