演習 2.3: OR 検索条件の使用

この演習では、ページにラジオ・ボタン・グループを追加して、ユーザーが AND 検索条件と OR 検索条件のいずれかを選択できるようにします。このページは、実行時には次のようになります。

この演習の完了時に完成する検索ページ

ライブラリーへの OR 検索コードの追加

  1. CustomerLib.egl ライブラリー・ファイルを開く。
  2. ファイルの最後の end 文の直前に以下のコードを追加する。
    function NameAndStateSearch_Or(func int,
        lname char(30) in, state char(2) in,
        Customers Customer[])
        get Customers with
            #sql{
                select
                    CUSTOMER_ID, FIRST_NAME, LAST_NAME, PASSWORD, PHONE,
                    EMAIL_ADDRESS, STREET, APARTMENT, CITY, STATE,
                    POSTALCODE, DIRECTIONS
                from EGL.CUSTOMER
                where LAST_NAME LIKE :lname OR STATE = :state
            };
        if (sqlcode != 0) func = 0; end
      end

    この関数は、where 文で AND ではなく OR が使用されている点以外は、前の演習で追加した NameAndStateSearch_And 関数と同じです。

  3. ファイルを保管する。
  4. Ctrl+G キーを押すか、ファイルを右クリックしてポップアップ・メニューで「生成」をクリックし、ライブラリー・ファイルの Java を生成する。
  5. ファイルを閉じる。

ページへのラジオ・ボタン・グループの追加

  1. customersearch.jsp ファイルに戻る。
  2. 「実行」ボタンの左側にカーソルを置いて Enter キーを押し、「実行」ボタンの上にブランク行を 1 行追加する。
  3. パレット・ビューの「Faces コンポーネント」ドロワーから、「ラジオ・ボタン・グループ」を新規行へドラッグする。
  4. ラジオ・ボタン・グループをクリックして選択する。
  5. プロパティー・ビューで、「選択項目の追加」ボタンをクリックする。ラジオ・ボタン・グループに対応する新規選択項目が表示されます。
  6. 新規選択項目の「名前」フィールドに次のテキストを入力する。

    AND

  7. この選択項目の「」フィールドに次のテキストを入力する。

    AND

  8. 選択項目の追加」を再びクリックする。
  9. 2 番目の選択項目の「名前」フィールドおよび「」フィールドに次のテキストを入力する。

    OR

    プロパティー・ビューは次のようになります。

    ラジオ・ボタン・グループに対応する選択項目が表示されているプロパティー・ビュー

  10. ページを保管する。

ページへの OR 検索コードの追加

  1. ページを右クリックし、ポップアップ・メニューから「ページ・コードの編集 」をクリックする。
  2. ページ・コード・ファイル内のすべてのコードを以下のコードに置き換える。

    package pagehandlers;
    
    import data.*;
    
    PageHandler customersearch { handleHardIOErrors = no, throwNrfEofExceptions = yes }
        {view="customersearch.jsp", onPageLoadFunction="onPageLoad"}
    
    searchTerms Customer;        //Customer record (search) values
    searchResults Customer[];    //Customers results rows
    pagemsgRec msgRec;          //pagemsgRec variable of type MsgRec
    func int;                //func - a flag to pass the state of the results
    andOr char(3);            //A char field that will be bound to the radio button group
    
    Function onPageLoad()
        if (func == 0)    //Either no rows, or 1st time into page
            pagemsgRec.msg="No customer(s) found or no search criteria entered.";
        End
    end 
    
    function searchFunction()
            func = 1;        //Initialize func before calling database
            searchTerms.Last_Name = searchTerms.Last_Name+"%";    //Add wildcard (%)
    
        if (andOr == "AND")
            CustomerLib.NameAndStateSearch_And(func, searchTerms.Last_Name,
                            searchTerms.State, searchResults);    //Call search function
            pagemsgRec.msg = "Customer(s) found.  Search again?";    //Assign msg text
            pagemsgRec.nbr = sysLib.size(searchResults);    //Get row count
         else
            CustomerLib.NameAndStateSearch_Or(func, searchTerms.Last_Name,
                            searchTerms.State, searchResults);    //Call search function
            pagemsgRec.msg = "Customer(s) found.  Search again?";    //Assign msg text
            pagemsgRec.nbr = sysLib.size(searchResults);    //Get row count
          end
       end  
    End
    
    Record msgRec          //Custom EGL record type definition
                           //used to combine numeric and string data
        10 nbr int;        //Integer - numeric field 	
        10 msg char(222);  //Character data
      end

    このコードは、以下の点を除き、前の演習で追加したコードと類似しています。

  3. ファイルを保存して閉じる。
  4. customersearch.jsp ページに戻る。
  5. ページ・データ・ビューから、「andOr - char(3)」変数をページ上のラジオ・ボタン・グループへドラッグして、そのラジオ・ボタン・グループにバインドする。
  6. searchFunction() 関数をページ上の「実行」ボタンにバインドする。

    ページは次のようになります。

    検索ページの外観

  7. ページを保管する。
  8. ページをテストする。

    ページをテストする際には、AND 関数と OR 関数の両方を使用してみてください。検索ページのいずれかのラジオ・ボタンを選択して、正常に機能することを確認します。

    この検索ページも、まだ使いやすいとはいえません。サンプル・データベースには多数のレコードがなく、推測される状態の種類も多くはないからです。次の演習では、「STATE」入力フィールドをコンボ・ボックスに変更し、データベースで使用されている状態がすべてリストとして表示されるようにします。

これで、「演習 2.4: コンボ・ボックスの動的取り込み」を開始する準備ができました。

ご利用条件 | フィードバック
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.