Erstellen Sie einen benutzerdefinierten Prüfer in Wicket

Erstellen Sie einen benutzerdefinierten Validator in Wicket

In diesem Lernprogramm erstellen Sie einen benutzerdefinierten Kennwortprüfer und hängen ihn an ein Kennwortfeld an.

Siehe Zusammenfassung Schritte zum Erstellen eines benutzerdefinierten Validators:

1. ImplementiertIValidator.

import org.apache.wicket.validation.IValidator;

public class StrongPasswordValidator implements IValidator{
    ...
}

2. validate(IValidatable validatable) überschreiben.

public class StrongPasswordValidator implements IValidator{
    ...
    @Override
    public void validate(IValidatable validatable) {

        //get input from attached component
        final String field = validatable.getValue();

    }
}

3. Angehängter benutzerdefinierter Validator zur Formularkomponente.

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());

        //...
    }

}

Vollständiges Beispiel

Im folgenden Wicket-Beispiel wird beschrieben, wie Sie einen benutzerdefinierten Kennwortprüfer erstellen und eine Fehlermeldung anzeigen, wenn das Kennwort nicht mit einem vordefinierten Muster übereinstimmt.

1. StrongPasswordValidator

Eine benutzerdefinierte Kennwortüberprüfung.

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);
    }

}

Datei: package.properties

StrongPasswordValidator.not-strong-password = Password required at least ... (omitted)

2. An Bauteil anbringen

Hängen Sie den obigen benutzerdefinierten Validator an ein Kennwortfeld an.

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

Wenn Sie ein schwaches Kennwort eingeben, wird eine Fehlermeldung vom benutzerdefinierten Validator zurückgegeben und angezeigt.

image

Laden Sie es herunter -Wicket-Custom-Validator-Example.zip (9KB)