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.

Abb. 2: Meldungen direkt an Annotationen

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.

Abb. 3: Meldungen aus Platzhaltern

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.

Martin Dilger ist freiberuflicher Software-Consultant und Wicket-Trainer. Er beschäftigt sich seit Jahren intensiv mit der Entwicklung von Webanwendungen im Enterprise-Java-Umfeld. Kontakt: martin@effectivetrainings.de
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.