このチュートリアルでは、カスタムパスワードバリデーターを作成し、パスワードフィールドにアタッチします。
カスタムバリデータを作成する手順の概要を参照してください。
{空} 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
強力なパスワード用]