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
強力なパスワード用]