JClient検証イベントについて

JDeveloperでは、次の方法で検証を実行できます。

JClient UIでは、ユーザーが間違ったデータを入力しないよう、UIに対して規則を設定します。たとえば、電話番号のフィールドには数字以外の文字を入力できないようにすることができます。同様に、入力されたデータを検証してユーザーに通知することもできます。このトピックでは、JClient UIに対してクライアント側の検証を実行する方法について説明します。

すべてのキーストロークの検証

次の例は、様々な検証に対応するよう拡張可能ですが、基本的にはキーが押されるたびに検証を実行するものです。これを行うには、検証コードをPlainDocumentイベントとして定義し、次にsetDocument()メソッドを使用してこのコードを特定のコントロールに登録します。これにより、BC4J属性項目にバインドしたコントロールに対するsetDocument()へのコールは、検証コードを含むドキュメントとともに動作するようになります。

//Add this code to create a document with the validation code and set it for the control

mDepartmentId.setDocument(new javax.swing.text.PlainDocument()
{
public void insertString(int offs, String str, javax.swing.text.AttributeSet a) throws    javax.swing.text.BadLocationException 
   {
   StringBuffer buf = new StringBuffer(str);
   int size = buf.length();
   char c;
   for (int i = 0; i < size; i++)
      {
      c = buf.charAt(i);
      if (!Character.isDigit(c))
      {
   Toolkit.getDefaultToolkit().beep(); 
   buf.deleteCharAt(i);
}
}

super.insertString(offs, buf.toString(), a);
}

}); 

/*Here is the code that is generated for you which will set the control binding for the document. This will work with the document you defined above. */

mDepartmentId.setDocument(JUTextFieldBinding.createAttributeBinding(getPanelBinding(), mDepartmentId, "DepartmentsView", null, "DepartmentsViewIter", "DepartmentId"));

JClientデータ・パネルでの検証

UIとビジネス・コンポーネントとのリンクを管理するpanelBindingオブジェクトを使用すると、ある操作に対してイベントをトリガーできます。このタイプの検証では、ユーザーがフィールドにデータを入力して別のフィールドに移動したときに検証を実行できます。具体的には、ビジネス・コンポーネントに定義されているビジネス・ルールに違反しないよう、ユーザーへの通知を伴う検証をパネルで実行する場合が考えられます。

たとえば、ビジネス・コンポーネントに範囲が100から1000の給与が定義されているとします。給与フィールドが500よりも少なく設定された場合に、ユーザーに警告を発してフィールドをハイライト表示するようにするとします。panelBindingオブジェクトは、beforeSetAttribute()がコールされたときにイベントをトリガーします。

JClientパネルに検証を設定するには次のようにします。

  1. 対象となるパネルをUIエディタで開きます。
  2. 構造ウィンドウで、「その他」を選択してから「panelBinding」を選択します。
  3. panelBindingのプロパティ・インスペクタで、beforeSetAttributeにイベント名を定義します。
  4. 作成されたイベント・ハンドラに次のコードを追加します。

    if (e.getAttributeName().equals("Salary"))
       {
       Object val = e.getNewValue();
       if (val != null)
          {
          Integer n = new Integer(val.toString());
          if (n.intValue() < 500)
             {
             mSalary.setBackground(Color.red);
             throw new oracle.jbo.JboException("That's a bit low!");
             }
          }
       }