Oracle ADF Business Componentsでのカスタムの宣言型の検証規則の作成

独自のXML Validator Beanを作成してJDeveloperに追加すると、他の開発者が同じ検証を宣言的に再利用できます。カスタム検証規則は次の3つの手順で作成します。

  1. スケルトン・クラスの生成
  2. 検証を実装するコードの追加
  3. IDEでの新規クラスの表示

スケルトン・クラスを生成するには、次のようにします。

  1. ナビゲータで、ビジネス・コンポーネントを含むプロジェクトを右クリックして「編集」を選択すると、ビジネス・コンポーネント・プロジェクト・エディタが表示されます。
  2. 左側のペインで、「登録済の規則」をクリックします。
  3. 「新規」をクリックし、新規の規則を作成します。
  4. 「新規検証規則」ダイアログで、フィールドに必要事項を入力し、クラスに適したオプションを選択します。
  5. 「OK」をクリックしてダイアログを閉じ、「終了」をクリックしてビジネス・コンポーネント・プロジェクト・エディタを終了します。

次に、生成したスケルトン・クラスにコードを追加して検証クラスを実装します。

検証クラスを実装するには、次のようにします。

検証クラスでは、vetoableChangeおよびvalidateValueという2つの主なメソッドを提供するJbiValidatorインタフェースを実装します。ビジネス・コンポーネント・フレームワークでは、属性値が設定される場合、vetoableChangeがコールされ、PropertyChangeEventに渡されます。通常は、validateValueをコールするためにvetoableChangeを実装します。validateValueがfalseを返した場合、vetoableChangeにより、失敗した内容に関する情報とともに例外がスローされます。validateValueの実装で、(ValidationExceptionを拡張する必要がある)独自の例外をスローすることもできます。

たとえば次のコードでは、DemoCardValidatorという名前の検証クラスが実装されます。validateValueで、ビルトインの規則では定義できない、複雑なビジネス・ロジックが実装されます。コンパイル後、このクラスを使用してValidatorタイプを作成し、次にエンティティ・オブジェクト(たとえば、CustomerエンティティのCreditCardNumber属性)に適用できます。

package d2e;
import oracle.jbo.server.rules.JbiValidator;
import oracle.jbo.server.util.VetoableChangeListener;
import oracle.jbo.server.util.PropertyChangeEvent;

import oracle.jbo.server.ValidationException;


public class DemoCardValidator implements JbiValidator {


  private String description = " Verifies a credit card number. ";
  private final int mMinValue = 100; // Arbitrary value for demo.

  /**
    * Return true if value is valid
    */

  public boolean validateValue(Object value) {
      // Validates a credit card number by comparing the
      // sum of the digits to mMinValue, defined above.
    int checkSum = 0;
      // Assume the following card number format:
      // "1234567890123456"
    String cardNo = value.toString();
      for (int i = 0; i < cardNo.length(); i++) {
        checkSum += Integer.parseInt(cardNo.substring(i, i + 1));
      }
      return (checkSum > mMinValue) ? true : false;
    }

  /**
    * Invoked by framework for validation
    */

  public void vetoableChange(PropertyChangeEvent pce)
    throws ValidationException {
    Object newValue = (pce.getNewValue());
    if (!validateValue(newValue)) {
      Object objs[] = new Object[2];
      objs[0] = pce.getPropertyName() + this.getDescription();
      objs[1] = newValue;
      String errCode = "001";
      ValidationException ve = new ValidationException(errCode, objs);
      throw ve;
    }
  }

  /**
    * Description of what this class validates
    */

  public String getDescription() {
    return description;
  }

  /**
    * Description of what this class validates
    */

  public void setDescription(String str) {
    description = str;
  }

}     

次に、新規クラスをJDeveloperでアクセス可能にします。これを実行するには、JDeveloperのIDEクラスパスを変更し、エンティティ・オブジェクト・エディタでこのパスにアクセスできるようにします。

新規Validator BeanをIDEで表示するには、次のようにします。

  1. ナビゲータで、クラスを右クリックして「メイク」を選択します。
  2. JDeveloperを終了します。
  3. <JDev_install>/jdev/bin/jdev.confに移動し、次のエントリを追加します。
    AddJavaLibPath ../myclasses        
  4. jdev.confを保存します。
  5. JDeveloperを再起動します。

これで、Validator BeanがJDeveloperでアクセス可能になりました。カスタムValidatorの使用方法の詳細は、「Oracle ADF Business Componentsでのカスタムの検証規則の使用方法」を参照してください。


Oracle ADF Business Componentsでの宣言型の検証規則の使用