JSF navigation Umleitung zur vorherigen Seite
Sobald sich der Benutzer erfolgreich am system anmelden, das system leitet den Benutzer auf die homepage. Nun mein problem ist, wenn der Benutzer klickt auf "account anzeigen" - Seite ohne login zu dem system das system umleiten Benutzer auf die login-Seite. wenn sich Benutzer am system anmelden jetzt ist das system leitet den Benutzer auf die Startseite, in diesem Fall, können Sie die Methode umleiten Benutzer auf die Vorherige Seite, view account " - Seite, anstatt der homepage?
versuchte ich mit session
String url = (String)session.getAttribute("url");
if(url != null)
response.sendRedirect(url);
else
response.sendRedirect("homepage.faces");
ich diesen code unter " public void doBtnAction(){} wenn der Benutzer login erfolgreich, dann redirect auf die url. Aber ich habe diesen Fehler
java.lang.IllegalStateException: Cannot forward after response has been committed
com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:322)
com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:130)
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:87)
com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:117)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:198)
InformationsquelleAutor | 2009-07-22
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese Ausnahme wird verursacht, weil Sie genannt
response.sendRedirect()
und nicht blockieren JSF gerendert die normale Reaktion. Sie müssen informieren, JSF, dass es nicht behandeln müssen normale Reaktion durch Zugabe vonder Aktion Methode.
Oder, noch besser, einfach nicht bekommen, die
HttpServletResponse
unter der JSF Hauben, sondern:Wird dieser automatisch aufrufen
responseComplete()
und es hält auch Ihren code sauber von unnötigen Servlet-API-Zeug. Siehe auch dieExternalContext
- API.Das funktioniert nicht in meinem Fall: wenn ich den Aufruf getAttribute("url") auf HttpSession, bekomme ich null. Ich habe versucht, den Aufruf getRequestURI() auf dem HttpServletRequest, aber dies gibt den URI der login-Seite, auf die der Benutzer umgeleitet wird, wenn er nicht angemeldet ist.
das ist ein ganz anderes problem. Sie haben, um es sich zuerst 🙂
Ich habe eine andere Frage: stackoverflow.com/questions/4105263/... 🙂
Ich habe versucht die Lösung, aber dispath() noch wirft eine IllegalStateException (mein code: FacesContext.getCurrentInstance().responseComplete(); FacesContext.getCurrentInstance().getExternalContext().dispatch("/mypage.xhtml"); )
InformationsquelleAutor BalusC
Nicht sicher, aber versuchen, dies zu tun durch
ExternalContext
Ausstattung:Etwas wie dieses:
InformationsquelleAutor Maksym Govorischev
Haben Sie nicht beschrieben framework Einrichtungen, die Sie für die Authentifizierung verwenden, so dass ich davon ausgehen, dass Sie die Authentifizierung durchführt, im eigenen code. Wahrscheinlich ist der einfachste Ansatz wäre, zu speichern Erster Bestimmungsort in der Sitzung vor der Umleitung auf die login-Seite und dann nach dem erfolgreichen login können Sie überprüfen, dieses Attribut und leitet Sie zur richtigen Stelle.
Ich insbesondere für JSF-Sie können dies tun, in der action Methode, die Prozesse login.
Eigentlich würde ich empfehlen, einen Rahmen für die Authentifizierung, zum Beispiel Spring Security, weil es solche Dinge out-of-box, und es wird viel leichter sein, erweitern Sie Ihr Sicherheitssystem in Fall müssen Sie einige zusätzliche features, aber es braucht einige zusätzliche Konfiguration
Ich bin mit JSF und FIlter, um zu überprüfen, ob die session ist null, wenn null umleiten Benutzer auf die login-Seite.
InformationsquelleAutor Maksym Govorischev
Logik beschrieben (login-redirect) sollte durchgeführt werden, durch den Filter der mechanik. Sie können auch versuchen, die standard-jsf navigation rules(wenn es passt kann Sie Fall). Und wenn Sie trotzdem möchten, senden Sie umleiten, um eine benutzerdefinierte url und nicht möchten, verwenden Sie Filter, tun Sie es in Ihrem servlet render-phase, nicht in der jsf-bean.
InformationsquelleAutor Karoff
Ausnahme ist ziemlich klar:
Was keinen Sinn macht?
InformationsquelleAutor Gene De Lisa
Du bist zu spät, und das gibt Ihnen die Ausnahme. Tun Sie es in einem phaselistener vor die render-response-phase.
InformationsquelleAutor Gene De Lisa
Platzieren Sie die folgende syntax in web.xml funktionieren sollte:
InformationsquelleAutor Dinesh Lomte