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

弱いパスワードを入力すると、カスタムバリデーターからエラーメッセージが返されて表示されます。

image

ダウンロード–Wicket-Custom-Validator-Example.zip(9KB)