我有一個容器認證後,所儲存的登錄數據如下託管bean:@ManagedProperty對象爲空
@ManagedBean(name = "authenticatedUserController")
@SessionScoped
public class AuthenticatedUserController implements Serializable {
@EJB
private jpa.UtentiportaleFacade ejbFacade;
public Utentiportale getAuthenticatedUser() {
if (AuthenticatedUser == null) {
Principal principal = FacesContext.getCurrentInstance().getExternalContext().getUserPrincipal();
if (principal != null) {
AuthenticatedUser = ejbFacade.findByLogin(principal.getName()).get(0);
}
}
return AuthenticatedUser;
}
getAuthenticatedUser就是所謂的每一頁,因爲我在Facelets把用戶名模板上右上方。 在PermessimerceController,另一managedbean,我需要訪問的登錄數據,所以很容易和快速地注入上述會話範圍控制器:
@ManagedProperty(value = "#{authenticatedUserController}")
private AuthenticatedUserController authenticatedUserController;
我經歷了以下幾個問題:試圖訪問鏈接到PermessimerceController頁面沒有經過身份驗證,我被重定向到登錄頁面(這是好的),但之後,我得到一個空指針異常,因爲authenticatedUserController在PermessimerceController內注入時爲空。 有問題的頁面同時使用PermessimerceController和AuthenticatedUserController,所以我應該猜測出於某種原因,PermessimerceController是在AuthenticatedUserController之前創建的。你能提出一個簡單的方法來解決這個問題嗎? 或者,我可以如何將登錄數據存儲在易於訪問的地方?
感謝 菲利波
我嘗試編輯這篇文章,希望能澄清更好,我有問題,找到有用的答案。 使用facelets模板我通過AuthenticatedUserController的屬性顯示用戶登錄名。剩下的內容被鏈接到Permessimer控制器,它需要關於用戶過濾數據的一些信息。 @ManagedBean註釋是實現這一點的簡單方法。不幸的是,如果用戶訪問該頁面而未經過認證,則注入的AuthenticatedUserController爲空。所以看起來PermessimerceController是在AuthenticatedUserController之前創建的,我不知道爲什麼。有沒有一種技巧可以用來確保AuthenticatedUserController是之前創建的?
你有干將和'PermessimerceController'中的ManagedProperty的setter? –
@Matt:在訪問它時會導致像'ManagedBeanCreationException'這樣的'FacesException',而不是NPE。 – BalusC
BaluC是對的,我有那個ManagedProperty的setter。 – Filippo