umleiten von jsf?
Ich arbeite an der Anwendung mit jsp, jstl und jsf für meine college-Projekt, das gesagt wird, ich bin auch sehr neu in jsf.
Alles läuft Super bisher. Allerdings habe ich offensichtlich ein problem, herauszufinden, wie zu tun umleiten von managed bean zur Seite mit dinamyc Parameter.
Zum Beispiel article.jsp?article_id=2
Kann jemand mir sagen, wie es gemacht wird ?
Ich versuche zu verwenden somethinng wie
FacesContext.getCurrentInstance().getExternalContext().dispatch("faces/article.jsp2?article_id=" + articleId);
Aber die Fehlermeldung:
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)
Ich versuche zu verwenden
response.sendRedirect("faces/article.jsp2?article_id=" + articleId);
return;
Aber wieder eine Fehlermeldung.
javax.servlet.ServletException: Cannot forward after response has been committed
javax.faces.webapp.FacesServlet.service(FacesServlet.java:256)
Kann jemand bitte mir sagen, wie ich die Weiterleitung von verwalteten java-bean-bei der Arbeit mit jsf ?
Balg ist mein code (vielleicht ist etwas falsch mit, dass und das ist, warum die Umleitung nicht funktioniert).
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;
}
Vielen Dank im Voraus.
InformationsquelleAutor Dmitris | 2009-06-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Falls jemand in das gleiche problem.
Das ist, was mein problem gelöst:
FacesContext#responseComplete()
nachHttpServletResponse#sendRedirect()
anweisen, JSF, dass es nicht noch zum Rendern der Antwort. In anderen Worten, eine weitere (eher ungeschickt) Lösung gewesen wäre zu nennenFacesContext.getCurrentInstance().responseComplete()
nach derresponse.sendRedirect()
Linie selbst.InformationsquelleAutor Dmitris
Warum bist du mit Versand in einem Ort und zu einer Umleitung in die andere? Dies ist nicht die Quelle des Problems - nicht die Rückkehr nach dem Absenden Antworten, jedoch, ist. Andere dann, dass, wenn Sie nichts dagegen haben, ich habe ein paar freundliche Vorschläge:
ArrayList<String>
).<img>
- tag mit src den Verweis auf eine cookie-Diebstahl-Seite, die sich in einer session hijack.InformationsquelleAutor laginimaineb
Grundsätzlich etwas ist bereits das senden der Ausgabe an den client, bevor Sie den Aufruf von response.sendRedirect(). Sobald etwas gesendet wurde, an den browser können Sie nicht umleiten oder weiterleiten an einen anderen Ort.
Im Allgemeinen, alle Szenarien, die dazu führen könnte, ein redirect oder forward behandelt werden sollten, so früh wie möglich in den request-Kontext zu versichern, die Umleitung passiert, bevor Sie Sie senden alle Daten an den client. Tun Sie etwas wie das aufrufen dieser code über einen tag in der Sicht?
InformationsquelleAutor SystemOut
René
InformationsquelleAutor Rene