JSF navigation rediriger vers la page précédente
Une fois l'utilisateur connecté au système, le système va rediriger l'utilisateur vers la page d'accueil. Maintenant, mon problème est que, si l'utilisateur clique sur l'affichage de la page de compte sans connexion au système, le système va rediriger l'utilisateur vers la page de connexion. si la connexion de l'utilisateur à le système le système redirige l'utilisateur vers la page d'accueil, dans ce cas, la méthode peut rediriger l'utilisateur vers la page précédente c'est à dire voir la page de compte au lieu de la page d'accueil?
j'ai essayé en utilisant session
String url = (String)session.getAttribute("url");
if(url != null)
response.sendRedirect(url);
else
response.sendRedirect("homepage.faces");
j'ai mis ce code en vertu de la public void doBtnAction(){} si le login de l'utilisateur réussit à le rediriger vers l'url. Mais j'ai eu cette erreur
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)
Vous devez vous connecter pour publier un commentaire.
Cette exception est dû au fait que vous avez appelé
response.sendRedirect()
et ne bloquez pas JSF de rendu de la réponse normale. Vous devez informer la JSF qu'il n'a pas besoin de gérer la réponse normale en ajoutantà la méthode d'action.
Ou, mieux encore, il suffit de ne pas obtenir le
HttpServletResponse
sous le JSF est capuches, mais au lieu de faire:Cela va automatiquement appeler
responseComplete()
et il permet également de votre code propre inutiles Servlet API choses. Voir aussi laExternalContext
API.Est pas sûr, mais essayez de faire cela par le biais de
ExternalContext
installations:Quelque chose comme ceci:
Vous n'avez pas un cadre installations vous utiliser pour l'authentification, donc je suppose que vous authentifier propre code. Sans doute, l'approche la plus simple serait d'enregistrer la destination initiale de la session à l'avant de la rediriger vers la page de connexion, puis, après une connexion réussie, vous pouvez consulter cet attribut et de rediriger au bon endroit.
J'particulier pour JSF, vous pouvez le faire dans la méthode d'action que le processus de connexion.
En fait, je vous suggère d'utiliser un cadre de travail pour l'authentification, par exemple le Printemps de Sécurité, parce qu'il n'ces choses hors de la boîte, et il sera beaucoup plus facile d'étendre votre système de sécurité dans le cas où vous avez besoin de fonctionnalités supplémentaires, si elle a besoin d'une configuration supplémentaire
Logique décrite (login-redirection) devrait être mis en œuvre à travers le Filtre de la mécanique. Vous pouvez également essayer la norme aci règles de navigation(si il peut s'adapter à votre cas). Et si vous voulez continuer à envoyer rediriger vers une url personnalisée et vous ne voulez pas utiliser de Filtres, de le faire dans votre servlet dans la phase de rendu, pas dans votre bean jsf.
L'exception est assez clair:
Ce qui n'a pas de sens?
Vous êtes trop en retard et qui est de vous donner l'exception. Le faire dans un phaselistener avant le rendu de la réponse de phase.
Plaçant au-dessous de la syntaxe dans web.xml devrait fonctionner: