2012-03-29 5 views
8

Hallo, ich bin neu in der JSF-Umgebung, im Versuch, ein Primefaces-Growl zu aktualisieren und dann auf eine Seite von einer CommandButton-Aktion umzuleiten.Wie man Primefaces 'p: knurrt und auf eine Seite umleiten

<p:commandButton value="Guardar" action="#{AgendamientoMBean.procesaAgendamientoJ()}" 
update="growlDetalle" /> 

Der verwaltete Bean-Code seine

FacesContext context = FacesContext.getCurrentInstance(); 
    context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, descripcion, detalle)); 
    .... 
    .... 
    return "agp_bandeja_citas_llamadas?faces-redirect=true"; 

Diese nur redirectme ​​auf die Seite aber tut mir das Knurren Meldung, ich getestet, dass, wenn meine Methode ändern, um die Seite zu nicht wieder die Meldung der Fall ist. .

Ich habe versucht, das Knurren der Seite zu aktualisieren, das im Umleiten, aber das ist unmöglich, denke ich.

ich denke, dass beim Umleiten verlor ich die Update-Funktionalität, weil ich jetzt in neue Seite bin.

Gibt es eine Möglichkeit zu sagen, jsf zuerst das Update zu tun und dann umleiten?

Hoffe ihr könnt mir helfen, Dank im Voraus

Antwort

42

Meldungen während der Umleitung verloren gehen. Sie können den Blitz verwenden, um Nachrichten zu behalten.

folgendes hinzufügen, bevor aus dem Aktionsmethode Rückkehr:

FacesContext context = FacesContext.getCurrentInstance(); 
context.getExternalContext().getFlash().setKeepMessages(true); 
+8

Beachten Sie, dass dieser Ansatz einen besonderen Fehler hat, wenn sie mit Mojarra verwendet: es wird nicht funktionieren dann die Umleitung geht an einen anderen Weg. Wenn sich die aktuelle Seite und die Zielseite im selben Pfad befinden (derselbe Ordner in der URL), funktioniert es einwandfrei. Siehe auch http://java.net/jira/browse/JAVASERVERFACES-1877 – BalusC

1

andere knurren Seite hinzufügen Sie

umleiten

wie diese <p:growl id="growlmsg2" showDetail="true" sticky="true" autoUpdate="true"/>

0

Da Flash-Fehler hat, ist meine Lösung zu machen ein separater Redirect-Button, der nach dem Anzeigen der Nachricht angeklickt wird:

HTML:

<h:form prependId="false"> 
    <p:growl /> 
    <p:button outcome="gotoABC" id="rdr-btn" style="display: none;" /> 
    <p:commandButton action="#{bean.process()}" update="@form" /> 
</form> 

Bean:

public void process(){ 
    addInfoMsg(summary, msgDetail); //Add msg func 
    RequestContext.getCurrentInstance().execute("setTimeout(function(){ $('#rdr-btn').click(); }, 3000);"); // 3 seconds delay. I put the script in Constants to config later. 
}