データバインドJSP要素の検証の指定

ADF検証フレームワークを使用して、JSPページのデータバインド要素の宣言検証規則を定義できます。データバインド要素の検証規則を定義すると、クライアント層によってユーザー入力が検証されます。ビジネス層の検証設定の詳細は、「Oracle ADF Business Componentsの検証ロジックの実装」を参照してください。クライアント層とビジネス層の両方の属性に検証を定義する場合、クライアント層での検証が先に行われるため、クライアント層での検証が優先されます。

UIコンポーネントのADFバインディング・オブジェクトでは、次のレベルの検証およびエラー処理を実行できます。

入力フォーム使用時の行の現行性の検証

データバインド入力フォームに行の現行性の検証を施行するかどうかを指定できます。デフォルトでは、行の現行性の検証は有効です。ページでは、次の非表示の入力フィールドを介して行の状態がバインド・コレクションのイテレータに伝えられます。

<input type="hidden" name="<c:out value='${bindings.statetokenid}'/>" value="<c:out value='${bindings.statetoken}'/>"/>

注意: データバインド入力フォームから前述の行を削除しないでください。検証を無効にするには、PageDef.xmlEnableTokenValidationプロパティを「False」に設定します(「行の現行性の検証の無効化」を参照)。

ユーザーがフォームを使用して変更を発行すると、更新を実行する前に、検証トークンにより、イテレータが現在行と編集対象行を比較できるようになります。イテレータの現在行がユーザーによる編集内容と一致しない場合、次のような検証エラーがWebページの上部に表示されます。

Failed to validate a row with key...

検証エラーにより、ページの編集が無効になったことを示すフィードバックがユーザーに提供され、ユーザーは不適切なオブジェクトを誤って変更することがなくなります。

実際の使用時には、行の現行性は限られた状況下で変更される場合があります。たとえば、ユーザーが入力フォームの表示中に「Next Set」および「Previous Set」操作を起動してコレクションを参照することがあります。ここで、コレクションの参照アクションにより、イテレータの現在行がリセットされます。この場合、検証トークンにより、ユーザーは不適切な行を変更できなくなります。

アプリケーションでこのような状況が発生しないと判断できる場合、または行の不整合が検出されたときに検証エラーを表示する必要がない場合は、検証トークンを無効にできます。

行の現行性の検証を無効にするには、次のようにします。

  1. 「アプリケーション・ナビゲータ」で、検証を無効にするJSPページを右クリックし、「ページ定義に移動」を選択します。
  2. 「構造」ウィンドウで、pagenamePageDefノードを右クリックし、ポップアップ・メニューから「プロパティ」を選択します。
  3. 「PageDefのプロパティ」ダイアログで、「アドバンスト・プロパティ」タブを選択します。
  4. 「トークン検証の有効化」ボックスで、「False」を選択します。EnableTokenValidation属性が値falsePageDef.xmlファイルのネームスペースに追加されます。

    検証を再度有効にするには、EnableTokenValidation属性をtrueに変更します。

ADFバインディング・プロパティを使用した入力フォームのエントリの検証

JSP入力フォームのバインド属性には、カスタムまたは事前定義のADF検証規則を追加できます。カスタムまたは事前定義のADF検証規則の詳細は、「宣言検証規則の使用」を参照してください。

入力フォームの属性値検証を実行するには、JSTL式で属性バインディングのerrorプロパティを使用します。

${bindings.attributeBindingName.error}

注意: 属性検証エラーは、属性バインディングのレベルで設定します。他のすべてのエラーは、バインディング・コンテナにキャッシュされ、${bindings.error}を使用して取得できます。

たとえば、次のような条件コードを使用してフォームのエラーを示すことができます(フィールドの背景色変更の場合)。

<c:choose> 
      <c:when test="${not empty bindings.Sal.error}"> 
         <html:text property="Sal" style="background-color:red"></html:text> 
      </c:when> 
      <c:otherwise> 
         <html:text property="Sal"></html:text> 
      </c:otherwise> 
</c:choose>    

バインド属性に検証規則を追加するには、次のようにします。

  1. 「アプリケーション・ナビゲータ」で、検証を無効にするページのPageDef.xmlファイルを選択します。
  2. 「構造」ウィンドウで、PageDefノードを右クリックし、ポップアップ・メニューから「検証規則の編集」を選択します。
  3. 「検証規則エディタ」ダイアログで、「新規」を選択します。
  4. バインド属性に追加する検証規則を選択します。詳細は、[F1]キーを押すか、「ヘルプ」をクリックします。

また、次のように、exceptionListプロパティを使用してバインディングから戻された例外オブジェクトを操作することもできます。

ADF例外オブジェクトのエラー・メッセージの横断

Webページでは、次のようなJSTLタグを使用してADFバインディングの例外オブジェクトを操作できます。

<c:out value="${exception.message}"/>

例外オブジェクトでは例外をネストできます。この場合、例外リストには外部ループ、現在の例外の詳細には内部ループを使用します。次のスクリプトは再帰的ではありませんが、最初の2つのレベルが生成されます。

<c:forEach var="exception" items="${bindings.exceptionsList}"> 
        <c:out value="${exception.message}"/> 
        <p> 
        <c:forEach var="e1" items="${exception.details}"> 
               <c:out value="${e1.message}"/> 
               <p> 
               <c:forEach var="e2" items="${e1.details}"> 
                  <c:out value="${e2.message}"/> 
               </c:forEach> 
               </p> 
        </c:forEach> 
</c:forEach>     

また、前述のように、errorプロパティを使用してバインディングから戻された属性検証エラーをテストすることもできます。


Oracle ADFバインディングについて
ADFバインディングのプロパティについて
Oracle ADF機能について