Wicket 6 und JSR-303 – BeanValidations

Jetzt brauchen wir noch ein annotiertes Domänen-Objekt, das es zu validieren gilt (Listing 5). Konstruktoren und Getter sind der Übersichtlichkeit halber weggelassen. Mit den hier definierten Constraints stellen wir sicher, dass Name, E-Mail und Geburtsdatum gesetzt sein muss (@NotNull), dass die E-Mail ein korrektes Format hat (@Pattern), die Telefonnummer nur aus Ziffern besteht (@Pattern) und das Geburtsdatum in der Vergangenheit liegen muss (@Past).

Listing 5
public class Trainer implements Serializable {

@NotNull
private String name;

@Pattern(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(regexp = "[0-9]+")
private String phone;

@Past
@NotNull
private Date birthDay;
}

In der Datei HomePage.html ersetzen wir das von Maven generierte Body-Tag durch das Markup in Listing 6.

Listing 6
        




In der Klasse HomePage implementieren wir ein einfaches Formular (Listing 7).

Listing 7
public HomePage(final PageParameters parameters) {
	super(parameters);
	IModel trainerModel = Model.of(new Trainer());
	add(new FeedbackPanel("feedback"));
	Form form = new Form("form", trainerModel);
	form.add(new TextField("name", new PropertyModel(trainerModel, "name"))
.add(new PropertyValidator()));
	form.add(new TextField("email", new PropertyModel(trainerModel, "email"))
.add(new PropertyValidator()));
	form.add(new TextField("phone", new PropertyModel(trainerModel, "phone"))
.add(new PropertyValidator()));
	form.add(new TextField("birthDay", new PropertyModel(trainerModel, "birthDay"))
.add(new PropertyValidator()));
	add(form);
}

Für jedes Attribut im Trainer-Objekt erzeugen wir ein Textfeld mit einem entsprechenden PropertyModel. Die einzige Besonderheit ist, dass wir jedem Textfeld zusätzlich einen PropertyValidator hinzufügen. Der PropertyValidator stammt aus dem Wicket-BeanValidation Modul und sorgt dafür, dass die JSR-303-Annotationen am Domänen-Objekt ausgelesen und validiert werden. Startet man die Anwendung und schickt das Formular testweise ab, ergibt sich das Bild in Abb. 1.

Abb. 1: JSR-303 Standard Fehlermeldungen – lesbar aber nicht gut

Hibernate-Validator verrichtet seine Arbeit. Die Constraints werden validiert. Bisher werden aber nur die Standardfehlermeldungen ausgegeben. Für den Fall @NotNull ergeben diese meistens noch Sinn. Im Fall der invaliden E-Mail mit der @Pattern-Annotation wird es für den normalen User aber schon völlig unverständlich.

Kommentare

Schreibe einen Kommentar

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