2010-12-14 12 views
2

Ich habe einige Felder auf meiner Seite, die ich validieren möchte. Aber ich möchte nicht, dass Fehler von dieser Validierung in <h:message> für diese Felder angezeigt werden.Feld validieren und Ausnahme in JSF auslösen, aber Fehlermeldung an ein anderes Feld anhängen?

Wenn ich Validator eines der Felder hinzufügen und Validator wirft Ausnahme, Fehler in <h:message> für dieses Feld angezeigt. Auf der anderen Seite muss ich Ausnahme auslösen, wenn ich Seite vom Einreichen unterdrücken möchte. Es genügt nicht, nur eine Fehlermeldung anzuzeigen.

Also habe ich einige versteckte Feld auf dem Formular, und Validator dort angebracht. Dieser Validator hat Zugriff auf UIComponents der Felder, die ich validieren möchte, damit er sie validieren kann. Wenn der Validator die Ausnahme auslöst, wird der Fehler in <h:message> für das versteckte Feld angezeigt, das ich beliebig platzieren kann.

Alles funktioniert, wenn ich nach den Feldern verstecktes Feld habe ich überprüfen möchten. (Wenn ich es vorstelle, wird die Validierung des versteckten Feldes ausgelöst, bevor sogar die UIC-Komponenten meiner Felder aktualisiert werden).

Das Problem ist, es gemeinen Hack ist :) Gibt es eine bessere Art und Weise, es zu tun?

Antwort

3

Das Problem ist, es ist böse hack :) Gibt es einen besseren Weg, es zu tun?

Nicht für die jeweilige Funktionsanforderung. Es ist sehr wahr, dass JSF sehr wenig Feinsteuerung für die Kreuzvalidierung mehrerer Felder erlaubt.

Alles funktioniert, wenn ich verstecktes Feld nach den Feldern, die ich validieren möchte, setze. (Wenn ich es vorstelle, wird die Validierung des versteckten Feldes ausgelöst, bevor sogar die UIC-Komponenten meiner Felder aktualisiert werden).

Komponenten werden während der Validierungsphasen in der Reihenfolge verarbeitet, in der sie im Komponentenbaum angezeigt werden. Wenn Sie irgendwann einen UIInput an Händen haben, der noch bearbeitet werden soll, dann müssen Sie den übermittelten Wert per UIInput#getSubmittedValue() erfassen. Wenn es bereits verarbeitet wurde, müssen Sie den übermittelten (und konvertierten und validierten) Wert stattdessen unter UIInput#getValue() erfassen.

Also, wenn Sie das versteckte Feld mit dem Validator nach setzen die zu-validierte Komponenten, dann müssen Sie UIInput#getValue() die Werte greifen. Wenn das versteckte Feld vor die zu validierenden Komponenten ist, dann müssen Sie UIInput#getSubmittedValue() die Werte greifen.

+0

Ok, sieht so aus, als ob ich noch ein verstecktes Feld brauche, um andere Felder zu validieren. Danke für den Hinweis "getSubmittedValue()"! – amorfis

+0

Gern geschehen. – BalusC

0

Ich habe diesen Code bekam für mich arbeiten:

throw new ValidatorException (new Arraylist());

wurden keine Fehler angezeigt.

Verwandte Themen