バリデータ内から他のフォーム フィールドにアクセスする適切な方法はありますか? 以下以外の解決策はありますか。
context.getViewRoot().findComponent("formid:exampleField:example")?
fe カスタムバリデーター内の都市フィールドを検証し、国が米国かどうかを確認したいと考えています。
あなたの質問を読み直してください。私はそれを次のように解釈します。
「都市フィールドが存在する場合、国フィールドが '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;
}