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); IModeltrainerModel = 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.

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.
Hinterlasse einen Kommentar