2014-02-14 13 views
6

möchte ich, wenn ich auf einem primefaces: Action und Umleitung zur gleichen Zeit

, eine Bean zur Verarbeitung genannt

<p:commandButton> 
klicken und zur gleichen Zeit, die Seite sollte auf eine andere Seite umgeleitet werden.

Mit anderen Worten, ich würde kombinieren mag:

<p:commandButton actionListener="#{processBean.process}" > 
</p:commandButton> 

Und:

<h:link outcome="redirection"> 
</h:link> 

wo "Umleitung" in faces-config.xml konfiguriert ist

Wie soll ich tun ? Gibt es einen besseren Weg, dies zu erreichen?

Antwort

4

Verwenden action Eigenschaft p:commandButton.

<p:commandButton actionListener="#{processBean.process}" > 
</p:commandButton> 

Änderung es

<p:commandButton actionListener="#{processBean.process}" action="viewIDToRedirect" > 
</p:commandButton> 

Zunächst wird actionListener dann aufgerufen werden, die Navigation in kicken. Aber denken Sie daran werden Sie die Navigations Regel definieren, müssen in faces-config.xml

+0

Danke! Das war genau das, was ich brauchte! – stackSaru

+0

Ich bin froh, dass es dir geholfen hat. Akzeptiere dies als Antwort dann :) – Makky

+0

@Makky Ich habe die gleiche Anforderung .. und wenn Validierungsfehler auf der Serverseite, sollte auf der gleichen Seite mit Validierung Nachricht bleiben sonst auf die angegebene Seite in Aktion Attribut umleiten .. Gegenwart sogar dort sind Validierungsfehlermeldungen, es wird umgeleitet .. Hilf mir, das zu lösen. –

2

Verwenden Sie action Attribut, aber behalten Sie nicht actionListener mehr. (. ZB DELETE)

<p:commandButton action="#{processBean.process}" /> 

Um die Aktion ohne Validierung der Form ausführen zu können, dann Prozess-Attribut verwenden könnte wie folgt aussehen:

<p:commandButton action="#{processBean.process}" process="@this" /> 

Hinweis die Zielverbindung mit faces-redirect=true

public String process() { 
    ... 
    return "/path/to/some.xhtml?faces-redirect=true"; 
} 
Rückkehr
0

In meinem Fall funktionierte keine der zuvor veröffentlichten Lösungen für mich, weil ich p: layout verwende. Also, ich hatte ein p: panelMenu im Westen p: layoutUnit und mein Hauptformular war in der Mitte p: layoutUnit. Als ich dann versuchte, zu einer anderen Seite zu navigieren, kehrte das Menü in seinen ursprünglichen Zustand zurück und ich weiß nicht warum.

mittlerweile Meine Lösung einen Klick mit jQuery aus der Aktionsmethode in der Backing Bean auf diese Weise zu simulieren ist:

RequestContext.getCurrentInstance().execute("$('#menuItemId').click()");

Jetzt kann ich den Zustand des p halten: panelMenu und navigieren Sie zu die gewünschte Seite.

In der ersten Frage können Sie auch auf den Link mit jQuery klicken. Ich weiß, dass jedes Szenario anders ist, aber in jedem Fall können Sie einen jQuery-Aufruf von der Backing-Bean verwenden.

Verwandte Themen