開発者ドキュメント

Wicketでカスタムバリデータを作成する

このチュートリアルでは、カスタムパスワードバリデーターを作成し、パスワードフィールドにアタッチします。

カスタムバリデータを作成する手順の概要を参照してください。

{空} 1。 `IValidator`を実装します。

import org.apache.wicket.validation.IValidator;

public class StrongPasswordValidator implements IValidator<String>{
    ...
}

{空} 2。 `validate(IValidatable validatable)`をオーバーライドします。

public class StrongPasswordValidator implements IValidator<String>{
    ...
    @Override
    public void validate(IValidatable<String> 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.mkyong.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<String> {

    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<String> 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<String> validatable, String errorKey) {
        ValidationError error = new ValidationError();
        error.addMessageKey(getClass().getSimpleName() + "." + errorKey);
        validatable.error(error);
    }

}


File:package.properties

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

2.コンポーネントへのアタッチ

上記のカスタムバリデーターをパスワードフィールドに添付します。

package com.mkyong.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<Void>("form") {
            @Override
            protected void onSubmit() {
                info("Done");
            }
        };

        add(form);
        form.add(password);

    }

}
<html>
<head>
<style>
.feedbackPanelERROR {
    color: red;
}
</style>
</head>
<body>
    <h1>Wicket custom validator example</h1>

    <div wicket:id="feedback"></div>
    <form wicket:id="form">
        <p>
            <label>Password</label>:
                        <input wicket:id="password" type="password" size="20"/>
        </p>
                <input type="submit" value="Register"/>
    </form>

</body>
</html>

デモ

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



ダウンロードする –

Wicket-Custom-Validator-Example.zip

(9KB)

参考文献

IValidator Javadoc]。リンク://wicket/wicket-password-field-example/[Wicket PasswordTextField

例]。 link://正規表現/正規表現によるパスワードの検証/正規表現/[RegEx

強力なパスワード用]

モバイルバージョンを終了