2012-03-23 10 views
5

2つのTimeItemがあるので、2番目のアイテムの値が最初のアイテムよりも大きくないことを検証できます。smartGWTでカスタムバリデータを作成する方法は?

CustomValidatorを継承し、検証ロジックを#conditionに配置する必要があることを知っています。#getFormItemを使用して検証済みアイテムの値を取得できますが、最初の値を渡す方法はわかりませんもちろん

timeItem.setValidators(cv); 

あなたがCA:

CustomValidator cv = new CustomValidator() { 

     @Override 
     protected boolean condition(Object value) { 
      if (otherTimeItem.getValue()<value){ 
       return true; 
      }else 
       return false; 
      } 
     } 
}; 

次にあなたにTimeItemバリデータを設定します。バリへのフィールド

答えて

7

それとも読みやすく、コード保守のために、ネストされたクラスを使用します。

class YourClass { 
    private TimeItem timeItem1; 
    private TimeItem timeItem2; 

    public YourClass() { 
     //Instantiate your TimeItem objects. 
     ... 

     //Set the validator 
     MyCustomValidator validator = new MyCustomValidator(); 
     timeItem1.setValidators(validator); 

     /Assuming that both items should check validation. 
     timeItem2.setValidators(validator); 
    } 

    ... 
    class MyCustomValidator extends CustomValidator { 

     @Override 
     protected boolean condition(Object value) { 
      //Validate the value of timeItem1 vs the timeItem2 
      //Overide equals or transform values to 
      if (timeItem1.getValueAsString().equals(timeItem2.getValueAsString()) { 

      //Return true or false. 
      } 
      return false; 
     } 
    ... 
    } 
} 

そして、あなたはあなたの入れ子になったクラスのプライベート属性を使用しないように2つのTimeItemオブジェクトのgetterメソッドを作成することを好む場合。

+0

thxは、別々の再利用可能なバリデーターを持っていることを期待していましたが、バリデーターが同じクラス内にあれば両方のフィールドにアクセスできます。 – javaNoober

+1

別のクラスが必要な場合は、その引数として:public MyCustomValidator(TimeItem timeItem1、TimeItem timeItem2)、あなたの条件メソッドで使用できる2つのコピープライベート属性でこれら2つのオブジェクトを割り当てます。 – gpapaz

2

は、あなたのような何かを行うことはできませんあなたのTimeItemの値を比較するのに '<'を使用しないでください。しかし時間オブジェクトに変換し、それらを比較してください。

0

これは古い投稿ですが、もっと良い解決策があると思います(少なくとも最新バージョンのSmartGWTでは)。だからここに興味のある人に行く:

get the whole recordgetRecord()を使って検証することができます。そして、あなただけのレコードの属性を照会することにより、任意のフィールドの値を取得することができます:あなたがあなたのフィールドへの参照を維持する必要がないため

CustomValidator validator = new CustomValidator() { 
    @Override 
    protected boolean condition(Object rawValue) { 
     Record validatedRecord = getRecord(); 
     String field1 = validatedRecord.getAttribute(FIELD1_NAME); 
     String field2 = validatedRecord.getAttribute(FIELD2_NAME); 

     return field2 <= field1; 
    } 
} 

これは良いです。

関連する問題