Hallo,
folgendes Problem:
Bei einem JEE-Projekt soll eine Validierung durchgeführt werden (JSF-Seite mit Formular, ganz normal). Dabei gibts dann ein h:selectOneMenu A, und nur wenn dieses bestimmte Werte hat, wird h:inputText B angezeigt. Dass in Feld B etwas eingegeben wird, soll also nur validiert werden, wenn A den entsprechenden Wert hat.
Bisher wars ein JEE5/seam 2-Projekt. Validierung von A mittels Annotation/Hibernate validators und s:validateAll. Validierung von B in der action-Bean in der submit-Methode per java Code. Also überprüfen ob B, wenn A den entsprechenden Wert hat, nicht leer ist, ggf. eine Message an das B-Eingabefeld schicken (mit der @In FacesMessages facesMessages-Komponente, methode facesMessages.addToControl(...). ) Funktioniert soweit auch alles gut.
Nun soll das Projekt nach JEE6 portiert werden und ein Freund meinte "bei JEE6 ist vor allem das Validieren viel einfacher, vor allem sowas von Feldern, die in Abhängigkeit zueinander stehen, geht da ganz einfach, ohne viel java-Code". Ist ja schön und gut, nur WIE? Ich habe bisher nix gefunden, was vernünftig funktioniert. Die JSR303 ist ziemlich kryptisch, da finde ich eigentlich keine Antwort auf die Frage. An Tags gibts da noch rich:validateGraph und s:validateForm, mit beiden geht das "irgendwie", aber so richtig einfach auch nicht.
Konkrete Probleme:
- ganz einfache Annotationen, die ein Feld in Abhängigkeit von einem anderen validieren, gibts nicht.
- mit rich:validateGraph kann man die validierung zwar durchführen, aber das ist dann auch wieder java-Code, ausserdem gibts da das gleiche Problem wie bei der
- Standard-Methode wie bei seam 2 (in der form-Submit-Methode) geht auch nicht mehr so wie vorher, weils keine seam-FacesMessages-Komponente mit der addToControl-Methode gibt, d.h. man kann zwar die Validierung im java-Code nach wie vor ausführen, aber es ist nicht mehr so einfach möglich, die Fehler-Message an die Komponente zu heften (dort angezegit mit h:message for...).
Also, wie macht man das richtig!?
Angeblich ist es ja ganz einfach und ich kann mir auch nicht vorstellen, dass dieses durchaus relevante Thema bei der JSR303 einfach vergessen wurde. Kommt doch ständig vor, bspws. Eingabe zweier Passwörter oder e-Mail-Adressen, die übereinstimmen müssen.. fühl mich langsam verblödet.
Weiss jemand die Lösung?
Gruß+Danke
Jan
folgendes Problem:
Bei einem JEE-Projekt soll eine Validierung durchgeführt werden (JSF-Seite mit Formular, ganz normal). Dabei gibts dann ein h:selectOneMenu A, und nur wenn dieses bestimmte Werte hat, wird h:inputText B angezeigt. Dass in Feld B etwas eingegeben wird, soll also nur validiert werden, wenn A den entsprechenden Wert hat.
Bisher wars ein JEE5/seam 2-Projekt. Validierung von A mittels Annotation/Hibernate validators und s:validateAll. Validierung von B in der action-Bean in der submit-Methode per java Code. Also überprüfen ob B, wenn A den entsprechenden Wert hat, nicht leer ist, ggf. eine Message an das B-Eingabefeld schicken (mit der @In FacesMessages facesMessages-Komponente, methode facesMessages.addToControl(...). ) Funktioniert soweit auch alles gut.
Nun soll das Projekt nach JEE6 portiert werden und ein Freund meinte "bei JEE6 ist vor allem das Validieren viel einfacher, vor allem sowas von Feldern, die in Abhängigkeit zueinander stehen, geht da ganz einfach, ohne viel java-Code". Ist ja schön und gut, nur WIE? Ich habe bisher nix gefunden, was vernünftig funktioniert. Die JSR303 ist ziemlich kryptisch, da finde ich eigentlich keine Antwort auf die Frage. An Tags gibts da noch rich:validateGraph und s:validateForm, mit beiden geht das "irgendwie", aber so richtig einfach auch nicht.
Konkrete Probleme:
- ganz einfache Annotationen, die ein Feld in Abhängigkeit von einem anderen validieren, gibts nicht.
- mit rich:validateGraph kann man die validierung zwar durchführen, aber das ist dann auch wieder java-Code, ausserdem gibts da das gleiche Problem wie bei der
- Standard-Methode wie bei seam 2 (in der form-Submit-Methode) geht auch nicht mehr so wie vorher, weils keine seam-FacesMessages-Komponente mit der addToControl-Methode gibt, d.h. man kann zwar die Validierung im java-Code nach wie vor ausführen, aber es ist nicht mehr so einfach möglich, die Fehler-Message an die Komponente zu heften (dort angezegit mit h:message for...).
Also, wie macht man das richtig!?
Angeblich ist es ja ganz einfach und ich kann mir auch nicht vorstellen, dass dieses durchaus relevante Thema bei der JSR303 einfach vergessen wurde. Kommt doch ständig vor, bspws. Eingabe zweier Passwörter oder e-Mail-Adressen, die übereinstimmen müssen.. fühl mich langsam verblödet.
Weiss jemand die Lösung?
Gruß+Danke
Jan