0

バリデータ内から他のフォーム フィールドにアクセスする適切な方法はありますか? 以下以外の解決策はありますか。

context.getViewRoot().findComponent("formid:exampleField:example")?

fe カスタムバリデーター内の都市フィールドを検証し、国が米国かどうかを確認したいと考えています。

4

1 に答える 1

1

あなたの質問を読み直してください。私はそれを次のように解釈します。

「都市フィールドが存在する場合、国フィールドが 'US' と等しいことを確認するカスタム バリデータを作成したいと考えています。」

したがって、私はこれについて次のように考えます。

最初にバリデータ インターフェイスを作成します。

@Documented
@ValidatorClass(value=CountryEqualsUSValidator.class)
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface CountryEqualsUS {

    String message() default "The country should be US for the city provided";

}

次に、バリデータ クラスを作成します。

public class CountryEqualsUSValidator implements Validator<CountryEqualsUS> {

    public void initialize(CountryEqualsUS arg0) {
    }

    public boolean isValid(Object value) {

        if(value != null && value instanceof YourBeanClass) {

            YourBeanClass yourBeanClass = (YourBeanClass) value;

            if(/*some test logic here*/) {
                return true;
            else {
                return false;
            }

        }

        return false;

    }

}

次に、検証するクラスで次のようにします。

@CountryEqualsUS
public class YourBeanClass {

    ...

}

次に、最後に、コントローラー/アクション クラスで、フォームが送信されると、都市は国を確認​​する値であり、このメソッドを追加して呼び出します。

public boolean doValidation(YourBeanClass yourBeanClass) {

    ClassValidator requestValidator = new ClassValidator(yourBeanClass.getClass());
    InvalidValue[] validationMessages = requestValidator.getInvalidValues(yourBeanClass);

    if (validationMessages != null && validationMessages.length > 0) {

        for (int i = 0; i < validationMessages.length; i++) {

            //Add a validation message to be displayed to the user

        }

        return false;

    }
        return true;
}
于 2009-06-26T06:11:37.077 に答える