JSF - Halten die Gesichter-Nachrichten nach Weiterleitung von @PostConstruct
Habe ich Seite 1 mit Knopf, springt zu Seite 2, Seite 2 fügen Sie einige Nachrichten und navigiert zurück zu page1. Ich möchte diese anzeigen Nachrichten auf page1. Ich habe versucht, viele Lösungen, aber nichts funktioniert.
Beispiel-code von page1.xhtml:
<p:commandButton value="edit" action="#{bean1.edit}"/>
In der managed bean:
public String edit() {
return "page2?faces-redirect=true";
}
page2 managed bean
@PostConstruct
private void postConstruct() {
Faces.getFlash().setKeepMessages(true);
Messages.addFlashGlobalError("cannot edit!");
Faces.navigate("page1?faces-redirect=true");
}
Beide Bohnen sind anzeigen Gültigkeitsbereich und beide Seiten haben <p:messages>
am Ende des Körpers.
- Haben Sie versucht, es zu tun, mit der Navigation?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zunächst, ich bin mir nicht ganz sicher, dass die
@PostConstruct
ist der beste Ort, um eine Umleitung durchzuführen. Sehen diese. That being said, google aufgetaucht diese und es sieht vernünftig. Versuchen Sie umleiten innerhalb der facelets-Seite mit einempreRender
event-tag in der Nähe der Spitze der Seite. CheersafterPhase()
und jetzt ist es OK.Dass kann passieren, wenn die
@PostConstruct
ist aufgerufen, zu spät. Offenbar ist die bean referenziert wird und so konstruiert das erste mal relativ "spät" in den Blick (z.B. in den Boden). An diesem Punkt, die Antwort kann sich bereits verpflichtet, das ist ein point of no return. Sie können navigieren Sie zu einer anderen Ansicht mehr.Dass Sie im Grunde wollen, berufen sich auf die
init()
Methode vor render response. Mit OmniFaces, können Sie verwenden Sie den folgenden Ansatz inpage2.xhtml
:(Sie können entfernen Sie die
<f:viewParam name="dummy" />
wenn Sie bereits Ihre eigenen view-Parameter auf dieser Seite; es ist nur um sicherzustellen, dassINVOKE_ACTION
phase ausgeführt wird, siehe auchpostInvokeAction
demo-Seite)und nur eine einfache
<f:event listener>
Methode:Den
Faces.getFlash().setKeepMessages(true);
ist unnötig, daMessages#addFlashGlobalError()
bereits tut. Bitte beachten Sie, dass in Mojarra der Flash-Bereich wird nicht funktionieren, wenn die navigation zu einem anderen Ordner in der URL. Die beiden Seiten müssen sich im gleichen Ordner in der URL. Dies wird behoben, in den kommenden Mojarra 2.1.14.Verwenden Sie einfach nevigation. Es wird sicherlich funktionieren. überprüfen Sie folgenden code.
public String redirect() throws Exception
{
FacesContext.getCurrentInstance().addMessage("Msg1",new FacesMessage("Nachricht 1"));
//FacesContext.getCurrentInstance().getExternalContext().redirect("/Sam/page2.jsf");
return "page2";
}