Wie kann eine Befehlsschaltfläche aufgerufen werden, ohne alle erforderlichen Eingaben zu überprüfen?

7

Ich versuche eine Umleitung von index.xhtml zu registerFirstTime.xhtml zu machen.

Der Code in der Seite index.xhtml lautet:

%Vor%

Der Inhalt der Umleitung in faces-config.xml lautet wie folgt:

%Vor%

Bis der eingegebene Name und das Passwort gefüllt sind, können Sie die Weiterleitung nicht durchführen. Wie kann ich die Umleitung des Datensatzes vornehmen, ohne die erforderlichen Felder zu berücksichtigen? Vielen Dank! =)

    
Víctor Pariente 28.06.2012, 11:31
quelle

2 Antworten

26

Fügen Sie immediate="true" der Befehlsschaltfläche hinzu, die die Verarbeitung aller Eingabefelder überspringt, die nicht das Attribut immediate="true" haben.

%Vor%

Unrelated auf das konkrete Problem, bitte beachten Sie, dass Sie hier technisch keine Weiterleitung senden. Dies sendet im Grunde eine Weiterleitung, d.h. die URL in der Adressleiste des Browsers bleibt die URL der Anmeldeseite. Sie müssen <redirect/> zum <navigation-case> hinzufügen. Beachten Sie auch, dass Navigationsfälle ein Überbleibsel von JSF 1.x sind. Seit JSF 2.x können Sie "implizite Navigation" durchführen, wobei Sie nur die Ansichts-ID als Ergebnis angeben.

%Vor%

Auf diese Weise können Sie den Navigationsfall ganz loswerden.

    
BalusC 28.06.2012, 12:35
quelle
6

@BalusC-Lösung sollte wie immer funktionieren. Aber ich möchte auf einige Dinge hinweisen, da Sie anscheinend Primefaces verwenden. Beide haben nichts mit der Frage zu tun, können Ihnen aber irgendwann helfen.

Erstens könnten Sie die implizite Navigation verwenden (eingeführt in JSF2). Auf diese Weise müssten Sie nicht alle Navigationsregeln in Ihrer faces-config.xml-Datei definieren (ich arbeite an einem alten JSF 1.2-Projekt und hasse es, die Navigationsrollen für alles zu definieren). Hier ist, wie Sie es tun würden:

<h:commandButton value="Register for the first time" action="registerFirstTime.xhtml?faces-redirect=true"/>

Der faces-redirect-Parameter erzwingt eine Weiterleitung statt einer Weiterleitung, falls Sie das brauchen.

Sagen Sie auch, dass Sie einige Werte richtig verarbeiten möchten, aber nicht alle. In diesem Fall können Sie das Attribut process von p: commandButton oder p: ajax verwenden. Zum Beispiel

<h:commandButton value="Register for the first time" action="registerFirstTime.xhtml?faces-redirect=true" process="@this, name"/>

Dadurch würde JSF nur die Schaltfläche (@this) und die Komponente mit id="name" (Ihr E-Mail-Feld) verarbeiten. Auch hier gilt das wahrscheinlich nicht für diese Frage, aber ich benutze es oft.

    
Andre 28.06.2012 14:22
quelle