Создать собственный валидатор в Wicket

Создать собственный валидатор в 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/

Введите слабый пароль, сообщение об ошибке возвращается из пользовательского валидатора и отображается.

image

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