ビジネス・コンポーネント・データ・アクセス・タグ - <jbo:CriteriaRow>

ビュー基準に対してWHERE句の構造および実行オプションを指定します。

JSP構文

<jbo:CriteriaRow
   id="criteriaRowId"
   [ index="number rowIndex | -1" ]
   [ uppercolumns="true | false" ]
   [ clearall="true | false" ]
>
      <Criteria . . . />
</jbo:CriteriaRow>

説明

<jbo:CriteriaRow>データ・タグは、ビュー基準インスタンス用に新規の行基準オブジェクトを作成します。個々の行基準で、ビュー・オブジェクトのWHERE句を定義します。このとき、1つの行基準に個々の属性に対する基準が含まれます。この基準オブジェクトを使用して動的SQL文を作成します。<jbo:DataSource>データ・タグのwhereclause属性では単純にWHERE句をデータソースに追加しますが、このCriteriaデータ・タグでは、より構造化した動的な方法でSQL問合せのWHERE句を作成できます。

ビュー基準は、含まれる行基準および個々の基準のコンテキストを提供します。このコンテキストを提供するには、データソースおよびビュー基準インスタンスのIDを<jbo:ViewCriteria>データ・タグで指定する必要があります。このため、<jbo:CriteriaRow>および<jbo:Criteria>データ・タグは、実際のデータソースが指定される、<jbo:ViewCriteria>タグ内で使用する必要があります。

JSPページを実行する際、個々の行基準オブジェクトに対して作成されるWHERE句は、データソースに対してOR処理で実行されます。したがって、データソースの値が複数の行基準に対する検索結果として返されるには、その値がCriteriaRowデータ・タグの定義の1つのみを満たしているだけでかまいません。さらに、各行基準には、基準オブジェクトをAND処理で実行する複数のCriteriaデータ・タグの定義を含めることができます。このように、CriteriaRowおよびCriteriaの定義を使用することにより、データソースに対して、複雑で構造化された動的なWHERE句を作成できます。

JSPページの行基準に対しては、次のような指定が可能です。

action属性をNewに設定した<jbo:ViewCriteria>タグを作成しないかぎり、作成した行基準が常に追加され、生成されるWHERE句はビュー基準の前回の行基準の定義とともにOR処理されます。このため、ユーザーが異なる基準値で同じ行基準を再実行できるようにするには、index属性を使用して、更新する行基準を索引によって識別する必要があります。行基準の索引を指定すると、個々の基準のデータ項目は次のルールに従って更新されます。

属性

次の例では、ビュー基準を新規の基準行に追加します。ユーザーが「Search」または「Add Criteria」ボタンをクリックすると、<jbo:Criteria>データ・タグが、JSP編集フォームから検索を実行するための基準値を取得します。<jbo:OnEvent>タグが使用されているJSPページが、生成されたイベントを処理し、基準値を受け取ります。

 
<jbo:OnEvent list="Search, Add Criteria" >
   <% String rowParam = params.getParameter("nRows");
      int nRows = 0;
      if (rowParam != null)
      {
         try { nRows = Integer.parseInt(rowParam); }
         catch (Exception ex) { }
      }
   %>   
   <jbo:ViewCriteria id="vc" datasource="ds" action="new">
   <% for (int index=0; index  nRows; index++)
      { %>
      <jbo:CriteriaRow id="row<%=index%>" >
         <jbo:AttributeIterate id="attrvc" datasource="ds" queriableonly="true">
            <% String item = attrvc.getName();
               String value = params.getParameter("row" + index + "_" + item); %>
            <jbo:Criteria dataitem="<%=item%>" value="<%=value%>" />
         </jbo:AttributeIterate>
      </jbo:CriteriaRow>
   <% } %>
   </jbo:ViewCriteria>
</jbo:OnEvent>    

次の例では、ビュー基準の基準行を消去します。ユーザーが「Delete Criteria」ボタンをクリックすると、CriteriaRowデータ・タグが、JSP編集フォームにより送信された入力パラメータで指定される索引を使用します。<jbo:OnEvent>データ・タグが使用されているJSPページが、生成されたイベントを処理し、基準行を消去します。

 
<jbo:OnEvent name="Del Criteria" >
   <% String remove = params.getParameter("index"); %>
   <jbo:ViewCriteria id="vc" datasource="ds" action="append">
      <jbo:CriteriaRow id="row<%=remove%>" index="<%=remove%>" clearall="true" />
   </jbo:ViewCriteria>
</jbo:OnEvent>