Wicket 6 und JSR-303 – BeanValidations
Feedback-Messages
Die erste und einfachste (aber auch unflexibelste) Möglichkeit wäre, die Fehlermeldungen direkt an den Constraint-Annotationen über das Attribut „message“ zu hinterlegen (Listing 8).
Listing 8
@NotNull(message = "Bitte geben Sie Ihren Namen ein.") private String name; @Pattern(message = "Die E-Mailadresse ist nicht gültig", regexp = "^[_A-Za-z0-9-]+(\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\.[A-Za-z0-9-]+)*((\.[A-Za-z]{2,}){1}$)") @NotNull(message = "Bitte geben Sie Ihre E-Mailadresse ein") private String email; @Pattern(message = "Ihre Telefonnummer sollte aus Ziffern bestehen",regexp = "[0-9]+") private String phone; @Past(message = "Sie können nicht in der Zukunft Geburtstag haben") @NotNull(message = "Bitte geben Sie Ihr Geburtsdatum ein.") private Date birthDay;
Startet man die Anwendung erneut und schickt das Formular mit absichtlich falschen Werten ab, ergibt sich das Bild aus Abbildung 2.

Ideal ist das aber nicht, denn die Wicket-Komponente (oder allgemein die Benutzeroberfläche) sollte festlegen, wann in welchem Kontext welche Fehlermeldung angezeigt wird. Das Domänen-Objekt „Trainer“ ist so nicht ohne weiteres kontextübergreifend wiederverwendbar. Viel besser ist die Verwendung der in der JSR-303-Spezifikation definierten Platzhalter (Listing 9).
Die JSR-303-Spezifikation definiert, dass Fehlermeldungen mit Platzhaltern befüllt sein können. Platzhalter haben das Format { value }. Wir verwenden die Platzhalter einfach als Schlüssel in die in Wicket üblicherweise verwendeten Property-Dateien für Texte.
Listing 9
@NotNull private String name; @Pattern(message = "{email.invalid}", regexp = "^[_A-Za-z0-9-]+(\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\.[A-Za-z0-9-]+)*((\.[A-Za-z]{2,}){1}$)") @NotNull private String email; @Pattern(message = "{phone.invalid}",regexp = "[0-9]+") private String phone; @Past(message = "{birthDay.invalid}") @NotNull private Date birthDay;
Zuletzt müssen wir nur noch die Datei HomePage.properties im Package der Klasse HomePage.java definieren (Listing 10).
Listing 10
name.Required=Bitte geben Sie Ihren Namen ein email.Required=Bitte geben Sie Ihre E-Mailadresse ein. email.invalid = Die E-Mailadresse ist nicht gueltig phone.invalid=Ihre Telefonnummer sollte aus Ziffern bestehen birthDay.invalid=Sie koennen nicht in der Zukunft Geburtstag haben birthDay.Required=Bitte geben Sie Ihr Geburtsdatum ein
Wieso aber beispielsweise email.Required? Wir haben keinen Schlüssel mit diesem Namen definiert. Attribute, die mit @NotNull annotiert sind, werden automatisch als Pflichtfelder (mittels setRequired) markiert. Der Schlüssel für Validierungsfehlermeldungen von Pflichtfeldern ist standardmäßig <Komponenten-ID>.Required. Es ist also gar nicht notwendig, einen eigenen Schlüssel zu definieren. Stattdessen genügen für diesen Fall die Wicket-Bordmittel.
Startet man die Anwendung ein letztes Mal, ergibt sich das Bild aus Abbildung 3.

In diesem sehr einfachen Beispiel wird schon ersichtlich, wie schön uns die JSR-303-Annotationen unsere Arbeit machen. Die Integration in Wicket ist denkbar einfach und eine Verwendung kann ich nur empfehlen.
Hinterlasse einen Kommentar