我有一個JSF應用程序中,用戶可以通過loginBean登錄如下:用戶似乎並沒有被清除
public String doLogin() {
Query query = ejbFacade.getEntityManager().createNamedQuery("loginQuery", User.class);
query.setParameter("email", username);
query.setParameter("pw", pw);
try {
FacesContext context = FacesContext.getCurrentInstance();
context.getExternalContext().getSessionMap().put("user", query.getSingleResult());
return "/loggedin/index?faces-redirect=true";
} catch (NoResultException userNotFoundEx) {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Unknown login, try again"));
return "/public/login";
}
}
然後,我有一個產生一個userRegistrationBean @已登錄用戶。這個bean是SessionScoped所以當一個registrates一個已經登錄 要知道,如果用戶從「直接登錄」或「註冊登錄」來到我執行以下操作:
@Produces @Logado
public User getLoggedUser() {
if (this.user.getId() == null) { //means no user was registered this time
this.loggedUser = FacesContext.getCurrentInstance().context.getExternalContext().getSessionMap().get("user");
if (this.loggedUser != null) {
return this.loggedUser;
}
throw new IllegalStateException("There's no user logged in.");
}
this.loggedUser = this.user;
return this.loggedUser;
}
我註銷方法:
FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
return "/index.xhtml?faces-redirect=true";
問題是,當我直接進入數據庫並進行更改時,讓我們說一些用戶名,然後用該登錄名進入系統,名稱不是最新的。 假設我的數據庫是空的。然後我註冊一個用戶 - >註銷 - >手動更改數據庫中的某些東西 - >登錄該用戶。用戶數據未更新。 似乎應用程序不會再次從數據庫中讀取數據,但日食鏈接會在每次登錄時顯示 新查詢。 請問有人能賜教嗎?