2009-06-24 6 views
0

バリデータの内部から他のフォームフィールドにアクセスする適切な方法はありますか? よりも別の解決策があります:私は国が米国の場合は、カスタムバリデータとチェック内の都市のフィールドを検証するバリデータの内側からリクエストパラメータにアクセスする

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

f.eが。

+0

質問に対する回答はありましたか? –

答えて

1

あなたの質問を再読み込み、私はこのようにそれを解釈するつもりです:

「あなたは都市のフィールドが存在する場合は、国フィールドが 『米国』に等しいことを確認したカスタムバリデータを書きたいです「

だから、私は次の方法でこのついて行くになります

まずバリ・インタフェースを作成します。

@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; 
} 
関連する問題