Créer un validateur personnalisé dans Wicket

Créer un validateur personnalisé dans Wicket

Dans ce didacticiel, vous allez créer un validateur de mot de passe personnalisé et le joindre à un champ de mot de passe.

Voir les étapes récapitulatives pour créer un validateur personnalisé:

1. ImplémenteIValidator.

import org.apache.wicket.validation.IValidator;

public class StrongPasswordValidator implements IValidator{
    ...
}

2. Remplacervalidate(IValidatable validatable).

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

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

    }
}

3. Validateur personnalisé attaché au composant de formulaire.

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

        //...
    }

}

Exemple complet

Consultez l'exemple Wicket suivant pour créer un validateur de mot de passe personnalisé et afficher un message d'erreur si le mot de passe ne correspond pas à un modèle prédéfini.

1. StrongPasswordValidator

Un validateur de mot de passe personnalisé.

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

}

Fichier: package.properties

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

2. Attacher au composant

Attachez le validateur personnalisé ci-dessus à un champ de mot de passe.

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

Saisissez un mot de passe faible, un message d'erreur est renvoyé par le validateur personnalisé et s'affiche.

image

Téléchargez-le -Wicket-Custom-Validator-Example.zip (9 Ko)