WicketのカスタムNotEqualInputValidator

Wicketには、開発者向けの多くのビルドインバリデータが含まれています。たとえば、 `EqualInputValidator`のように、2つのフォームコンポーネントのアイデンティティを比較するのに最適です。しかし、Wicket’sは、同等のバリデータではないバリデータを提供していませんでした。

NotEqualInputValidator

ここで私は `EqualInputValidator`を参照として取得し、2つのフォームコンポーネントの等価コンパレータでないため、" NotEqualInputValidator "という新しいカスタムバリデータを作成します。

package com.mkyong.user;

import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.FormComponent;
import org.apache.wicket.markup.html.form.validation.AbstractFormValidator;
import org.apache.wicket.util.lang.Objects;

public class NotEqualInputValidator extends AbstractFormValidator {

    private static final long serialVersionUID = 1L;

   /** **  form components to be checked. ** /    private final FormComponent<?>[]components;

   /** **
     **  Construct.
     **
     **  @param formComponent1
     **             a form component
     **  @param formComponent2
     **             a form component
     ** /    public NotEqualInputValidator(FormComponent<?> formComponent1,
            FormComponent<?> formComponent2) {
        if (formComponent1 == null) {
            throw new IllegalArgumentException(
                    "argument formComponent1 cannot be null");
        }
        if (formComponent2 == null) {
            throw new IllegalArgumentException(
                    "argument formComponent2 cannot be null");
        }
        components = new FormComponent[]{ formComponent1, formComponent2 };
    }

    public FormComponent<?>[]getDependentFormComponents() {
        return components;
    }

    public void validate(Form<?> form) {
       //we have a choice to validate the type converted values or the raw
       //input values, we validate the raw input
        final FormComponent<?> formComponent1 = components[0];
        final FormComponent<?> formComponent2 = components[1];

        if (Objects.equal(formComponent1.getInput(), formComponent2.getInput())) {
            error(formComponent2);
        }
    }

}

どのように使用するのですか?

それを使用するには、通常のバリデータのように接続します。

    private PasswordTextField passwordTF;
    private PasswordTextField cpasswordTF;

    add(new NotEqualInputValidator(oldpasswordTF,passwordTF));