Создать собственный валидатор в Wicket
В этом уроке вы создадите пользовательский валидатор паролей и прикрепите его к полю пароля.
Смотрите сводные шаги для создания собственного валидатора:
1. РеализуетIValidator.
import org.apache.wicket.validation.IValidator; public class StrongPasswordValidator implements IValidator{ ... }
2. Отменитьvalidate(IValidatable validatable).
public class StrongPasswordValidator implements IValidator{ ... @Override public void validate(IValidatable validatable) { //get input from attached component final String field = validatable.getValue(); } }
3. Прикрепленный пользовательский валидатор для компонента формы.
public class CustomValidatorPage extends WebPage {
public CustomValidatorPage(final PageParameters parameters) {
final PasswordTextField password = new PasswordTextField("password",Model.of(""));
//attached custom validator to password field
password.add(new StrongPasswordValidator());
//...
}
}
Полный пример
См. Следующий пример Wicket для создания пользовательского средства проверки пароля и отображения сообщения об ошибке, если пароль не соответствует предварительно определенному шаблону.
1. StrongPasswordValidator
Пользовательский валидатор паролей.
package com.example.user; import java.util.regex.Pattern; import org.apache.wicket.validation.IValidatable; import org.apache.wicket.validation.IValidator; import org.apache.wicket.validation.ValidationError; public class StrongPasswordValidator implements IValidator{ private final String PASSWORD_PATTERN = "((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{6,20})"; private final Pattern pattern; StrongPasswordValidator() { pattern = Pattern.compile(PASSWORD_PATTERN); } @Override public void validate(IValidatable validatable) { final String password = validatable.getValue(); // validate password if (pattern.matcher(password).matches() == false) { //Message from key "StrongPasswordValidator.not-strong-password" error(validatable, "not-strong-password"); } } private void error(IValidatable validatable, String errorKey) { ValidationError error = new ValidationError(); error.addMessageKey(getClass().getSimpleName() + "." + errorKey); validatable.error(error); } }
Файл: package.properties
StrongPasswordValidator.not-strong-password = Password required at least ... (omitted)
2. Присоединить к компоненту
Присоедините указанный выше валидатор к полю пароля.
package com.example.user;
import org.apache.wicket.PageParameters;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.PasswordTextField;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.model.Model;
public class CustomValidatorPage extends WebPage {
public CustomValidatorPage(final PageParameters parameters) {
add(new FeedbackPanel("feedback"));
final PasswordTextField password
= new PasswordTextField("password",Model.of(""));
//attached custom validator to password field
password.add(new StrongPasswordValidator());
Form> form = new Form("form") {
@Override
protected void onSubmit() {
info("Done");
}
};
add(form);
form.add(password);
}
}
Wicket custom validator example
3. Demo
Начало и посещение -http://localhost:8080/WicketExamples/
Введите слабый пароль, сообщение об ошибке возвращается из пользовательского валидатора и отображается.

Скачать -Wicket-Custom-Validator-Example.zip (9KB)