JSF-2-Umleitung problem
Habe ich folgende zwei Methoden in meinem backing-bean -
public String validateUser() {
FacesContext facesCtx = FacesContext.getCurrentInstance();
if(userName.equals("user1") && password.equals("pass1")) {
User user = new User();
user.setUserName(userName);
HttpSession session = (HttpSession) facesCtx.getExternalContext().getSession(false);
session.setAttribute(User.SESSION_ATTRIBUTE, user);
return "secured/home.jsf?faces-redirect=true";
}
if(!userName.equals(LoginBean.USERNAME)) {
FacesMessage msgForUserName = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Username did not match.", null);
facesCtx.addMessage("loginForm:userName", msgForUserName);
}
if(!password.equals(LoginBean.PASSWORD)) {
FacesMessage msgForPassword = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Password did not match.", null);
facesCtx.addMessage("loginForm:password", msgForPassword);
}
return null;
}
public String logout() {
logger.info("Logging out .........................................");
FacesContext facesCtx = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) facesCtx.getExternalContext().getSession(false);
session.invalidate();
return "login.jsf?faces-redirect=true";
}
Ich weiß nicht, warum die Umleitung funktioniert in der ersten Methode (d.h. validateUser()), aber es funktioniert nicht bei der zweiten Methode (d.h. Abmelden()).
Der code innerhalb der logout-Methode tatsächlich ausgeführt wird, wird die Sitzung auch wird für ungültig erklärt,aber irgendwie hat der browser bleibt auf der gleichen Seite.
Und, ich bin mit PrimeFaces p:commandButton und ajax aktiviert ist beide.
Irgendeine, irgendeine Idee?
Danke.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde nicht erwarten, dass es zu scheitern. Ich vermute, das hat etwas zu tun mit der ungültig-Sitzung. Versuchen Sie es mit
ajax="false"
auf die<p:commandButton>
.Unabhängigen für das problem, sollten Sie versuchen zu minimieren, die
javax.servlet
Importe in JSF managed beans. Sie oft zeigen, dass Sie die Dinge in der falschen Stelle oder die plumpe Art und Weise. In reinen JSF2, Sie für ungültig erklären kann die Sitzung wie folgt:Können Sie die get - /set-Objekte in der Sitzung von der Sitzung Anzeigen.
Oder einfach nur machen es zu einem managed bean (Eigentum).
Siehe auch:
doFilter()
Methode?<p:commandButton>
durch<h:commandButton>
. 3) Wenn 2) funktioniert, versuchen Sie<f:ajax />
zu den<h:commandButton>
. Auf diese Weise lernen wir, wenn es um den PrimeFaces und/oder session-Invalidierung.FacesContext.getCurrentInstance().getExternalContext().redirect("login.jsf"); return null;
statt.