redirection à partir de l'aci?
Je suis en train de travailler sur une application avec jsp, jstl et jsf pour mon projet de collège, c'est dit, je suis ainsi très nouveau pour les jsf.
Tout va bien jusqu'à présent. Cependant, je semble avoir un problème pour comprendre comment faire de redirection à partir de managed bean à la page avec dinamyc paramètres.
Par exemple article.jsp?article_id=2
Quelqu'un peut-il me dire comment il est fait ?
J'ai essayé d'utiliser somethinng comme
FacesContext.getCurrentInstance().getExternalContext().dispatch("faces/article.jsp2?article_id=" + articleId);
Mais d'erreur:
javax.servlet.ServletException: #{postComment.postClick}: javax.faces.FacesException: javax.servlet.ServletException: javax.faces.component.UIViewRoot cannot be cast to com.sun.faces.application.StateManagerImpl$TreeNode
javax.faces.webapp.FacesServlet.service(FacesServlet.java:256)
J'ai essayé d'utiliser
response.sendRedirect("faces/article.jsp2?article_id=" + articleId);
return;
Mais encore une fois d'avoir une erreur.
javax.servlet.ServletException: Cannot forward after response has been committed
javax.faces.webapp.FacesServlet.service(FacesServlet.java:256)
Quelqu'un peut-il me dire comment puis-je rediriger des managed bean java lorsque vous travaillez avec la jsf ?
Soufflet est mon code (peut-être quelque chose de mal avec cela et c'est pourquoi la redirection ne fonctionne pas).
HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
String articleId = request.getSession().getAttribute("article_id").toString();
//String articleId = request.getParameter("article_id");
String authorName = request.getSession().getAttribute("user_name").toString();
java.util.Calendar calendar = java.util.Calendar.getInstance();
String commentDate = String.valueOf(calendar.get(java.util.Calendar.DAY_OF_MONTH)) + ".";
commentDate += String.valueOf(calendar.get(java.util.Calendar.MONTH)) + ".";
commentDate += String.valueOf(calendar.get(java.util.Calendar.YEAR));
ArrayList error = new ArrayList();
if(commentName.contains("<"))
{
error.add("Comment name contains illegal characters");
}
if(commentBody.isEmpty() && commentBody.contains("<script"))
{
error.add("Your message body contains illegal characters");
}
if(error.size() > 0)
{
request.getSession().setAttribute("error", error);
error.clear();
FacesContext.getCurrentInstance().getExternalContext().dispatch("article.jsp2?article_id=" + articleId);
}
else
{
Comment comment = new Comment();
comment.setCommentAuthor(authorName);
comment.setCommentBody(commentBody);
comment.setCommentDate(commentDate);
comment.setCommentName(commentName);
comment.setArticleId(articleId);
DisplayArticleIO addComment = new DisplayArticleIO();
addComment.postComment(comment);
// FacesContext.getCurrentInstance().getExternalContext().dispatch("faces/article.jsp2?article_id=" + articleId);
response.sendRedirect("faces/article.jsp2?article_id=" + articleId);
return;
}
Vous en remercie d'avance.
OriginalL'auteur Dmitris | 2009-06-10
Vous devez vous connecter pour publier un commentaire.
Dans certains cas on va s'exécuter dans le même problème.
C'est ce qui a résolu mon problème:
FacesContext#responseComplete()
aprèsHttpServletResponse#sendRedirect()
pour instruire JSF qu'il n'a pas besoin de rendre la réponse. En d'autres mots, l'autre (plus maladroit) solution aurait été d'appelerFacesContext.getCurrentInstance().responseComplete()
après laresponse.sendRedirect()
ligne vous-même.OriginalL'auteur Dmitris
Pourquoi êtes-vous à l'aide de l'expédition en un seul endroit et de les rediriger dans l'autre? Ce n'est pas la source du problème - pas de retour après l'envoi des réponses, cependant, est. Alors que d'autres, si vous n'avez pas l'esprit, j'ai quelques sympathiques suggestions:
ArrayList<String>
).<img>
balise avec un src pointant vers un cookie de voler de la page, ce qui entraînerait une session détourner.vous êtes les bienvenus 😛
OriginalL'auteur laginimaineb
Fondamentalement, quelque chose est en train d'envoyer la sortie vers le client avant de faire l'appel à la réaction.sendRedirect(). Une fois que quelque chose a été envoyé au navigateur vous ne pouvez pas rediriger ou de les transférer à un endroit différent.
En général, tous les scénarios qui pourraient entraîner une redirection ou un avant doivent être traitées aussi rapidement que possible dans le contexte de la demande d'assurer la redirection se passe avant d'envoyer des données sur le client. Faites-vous quelque chose de semblable à l'appel de ce code par l'intermédiaire d'une balise dans la vue?
OriginalL'auteur SystemOut
René
OriginalL'auteur Rene