2 Stimmen

Dynamische erforderliche Validierung für verschiedene Schaltflächen?

Ich lerne derzeit über jsf 2.0 aus dem Core JSF 2.0-Buch + Glassfish + CDI.

Ich habe eine Frage zur Validierungsfunktion von JSF.

Angenommen, ich habe eine sehr einfache Login-Anwendung mit einem sehr einfachen Layout wie :

Benutzer-ID: (Eingabefeld für Benutzer-ID - mit required="true")
Passwort: (Eingabefeld für das Passwort - mit required="true")
Login-Button + Register-Button (mit immediate="true") + Check-Button für die Verfügbarkeit von Benutzer-IDs

Angenommen, der Login-Button wird gedrückt und die Benutzer-ID und das Passwort sind leer, es würde ein Validierungsfehler auf beiden Feldern auftreten und das funktioniert, wie ich es beabsichtigt habe.

Und wenn der Register-Button gedrückt wird, ist es egal, ob die Benutzer-ID oder das Passwort vom Benutzer ausgefüllt sind, da es immediate="true" verwendet und somit die Validierung umgeht und der Befehl in der Apply Request Value-Phase ausgeführt wird, und das funktioniert immer noch so, wie ich es beabsichtigt habe.

Und hier liegt mein Problem ... Wenn der Check-Button für die Verfügbarkeit der Benutzer-ID gedrückt wird, erwarte ich nur, dass die Benutzer-ID ausgefüllt ist, und es spielt keine Rolle, ob das Passwortfeld ausgefüllt ist oder nicht, aber das Passwortfeld wird einen Fehler melden, dass es ein Pflichtfeld ist.

Gibt es einen Weg, dieses Problem zu lösen? Ich weiß, dass dies eine sehr einfache Anwendung sein könnte, aber an meinem Arbeitsplatz entwerfen sie viele Bildschirme wie diesen, beispielsweise mit Speichern-Schaltfläche zusammen mit Aktualisierungsschaltfläche mit unterschiedlichen Pflichtfeldern, aber die Schaltflächen befinden sich auf derselben Seite.

Vielen Dank!

4voto

BalusC Punkte 1034465

Setzen Sie sowohl die Verfügbarkeitstaste als auch das Benutzernamensfeld mit immediate="true" und platzieren Sie die Registrierungstaste in einem getrennten .

Zum Beispiel

Alternativ können Sie im required-Attribut festlegen, welcher Button gedrückt wurde (dann ist er als Request-Parameter vorhanden).

0 Stimmen

Hallo, vielen Dank für die Antwort. Ich verstehe die zweite Lösung. Könnten Sie aber bitte die erste Lösung erklären? Was bedeutet "immediate="true"" im Feld bean.username, weil ich bisher nur den Effekt von immediate="true" auf die Befehlsschaltflächen verstehe, nämlich die Validierung zu überspringen und der Befehl in der Phase "apply request value" ausgeführt wird.

1 Stimmen

Eine Einreichung durch einen Button mit immediate="true" wird nur Felder verarbeiten, die auch immediate="true" haben. Das immediate-Attribut wird in diesem Artikel mit praktischen Beispielen ausführlich erklärt: diesem Artikel. Hinweis: Der Code im Artikel ist auf JSF 1.2 ausgerichtet, funktioniert jedoch auch auf 2.0, und die Theorie gilt ebenfalls für JSF 2.0.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X