0
バリデータの内部から他のフォームフィールドにアクセスする適切な方法はありますか? よりも別の解決策があります:私は国が米国の場合は、カスタムバリデータとチェック内の都市のフィールドを検証するバリデータの内側からリクエストパラメータにアクセスする
context.getViewRoot().findComponent("formid:exampleField:example")?
f.eが。
バリデータの内部から他のフォームフィールドにアクセスする適切な方法はありますか? よりも別の解決策があります:私は国が米国の場合は、カスタムバリデータとチェック内の都市のフィールドを検証するバリデータの内側からリクエストパラメータにアクセスする
context.getViewRoot().findComponent("formid:exampleField:example")?
f.eが。
あなたの質問を再読み込み、私はこのようにそれを解釈するつもりです:
「あなたは都市のフィールドが存在する場合は、国フィールドが 『米国』に等しいことを確認したカスタムバリデータを書きたいです「
だから、私は次の方法でこのついて行くになります
まずバリ・インタフェースを作成します。
@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";
}
次にAVを作成しますalidatorクラス:次に
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;
}
質問に対する回答はありましたか? –