2016-07-11 10 views
0

Ich habe zwei Pflichtfelder, die zweite hängt von der ersten ab, ich meine, das zweite Feld muss deaktiviert werden, wenn die erste leer ist.Zwei erforderliche und abhängige Felder

Am Anfang des Prozesses ist alles gut, wenn ich das erste Feld die zweite füllt erscheint als aktivieren, aber wenn ich das erste Feld bereinigen, machen die Validierung einen Fehler und das zweite Feld ist immer noch aktiviert.

<h:inputText required="true" value="#{x.x}" /> 
<h:inputText required="true" value="#{x.y}" disabled="#{empty x.x}" /> 

Wie kann ich dafür sorgen, dass es richtig funktioniert?

+0

Ich denke, das ist das erwartete Verhalten. Sie haben verlangt = true Attribut bedeutet, dass Sie den Wert nicht löschen können. Wenn Sie den Wert nicht löschen können, kann das zweite Feld nicht wieder deaktiviert werden. –

Antwort

1

Ihr disabled Attribut überprüft den Modellwert. Modellwerte werden jedoch bei fehlgeschlagener Validierung nicht aktualisiert. Sie überprüfen dann im Grunde den zuvor übermittelten Modellwert.

besser überprüfen Sie den übermittelten Wert selbst statt, die von der Komponente Client-ID identifiziert als HTTP-Request-Parameter zur Verfügung:

<h:inputText binding="#{c}" ... required="true" /> 
<h:inputText ... required="true" disabled="#{empty param[c.clientId]}" /> 

Oder überprüfen, zusätzlich, wenn die Komponente noch valid ist:

<h:inputText binding="#{c}" ... required="true" /> 
<h:inputText ... required="true" disabled="#{empty c.value or not c.valid}" /> 

Unabhängig davon, diese nur deckt nicht den Fall, wenn Sie beide Felder ausfüllen und dann nur die erste entfernen. Die zweite erscheint als deaktiviert, ist aber immer noch voll. Es ist nicht klar aus der Frage, was genau du in einem solchen Fall tun willst, also überlasse ich es dir als Übung.