< 前へ | 次へ >

演習 3: OR 検索条件を使用する

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

この改良されたページを実行すると、次のようになります。

この演習終了後の完成した検索ページ

OR 検索コードをライブラリーに追加する

前回の演習では、AND 条件で検索する関数を追加しました。 次に、OR 条件で検索する関数を追加します。 このようにすることで、姓または州のいずれかが一致するレコードを、 ユーザーが検索できるようになります。
  1. SearchLibrary.egl ライブラリー・ファイルを開きます。
  2. このファイルの最後の end ステートメントの直前に、 次のコードを追加します。
    	function NameAndStateSearch_Or(lname STRING in, 
    			state CHAR(2) in, customer Customer[])
    		get customer with
    			#sql{
    				select
    					CUSTOMERID, FIRSTNAME, LASTNAME, PASSWORD, PHONE, 
    					EMAILADDRESS, STREET, APARTMENT, CITY, "STATE", 
    					POSTALCODE, DIRECTIONS
    				from EGL.CUSTOMER
    				where LASTNAME like :lname 
    					or "STATE" = :state
    			order by
    				CUSTOMERID asc
    			};
    	end

    この関数は、前回の演習で追加した NameAndStateSearch_And 関数と ほぼ同じですが、where ステートメントで AND ではなく OR を使用する点が異なります。

  3. ファイルを保存します。 EGL が自動的にライブラリーを生成します。
  4. ファイルを閉じます。

これで、SearchLibrary.egl ファイルのコードが完成しました。 このファイル内にエラーがある場合 (赤の X 記号でマークされます) は、演習 3 終了後の SearchLibrary.egl ファイルのファイルに記載されているコードと、作成したコードが一致していることを確認してください。

ラジオ・ボタン・グループをページに追加する

2 つの異なる検索関数が使えるようになったので、 ユーザーがどちらの検索タイプを使用するかを選択できるように、 ラジオ・ボタンをページに追加する必要があります。
  1. customersearch.jsp ファイルに戻ります。
  2. カーソルを「実行」ボタンの左側に置き、Enter キーを押して、 「実行」ボタンの上に新しい行を追加します。
  3. パレットから、「拡張 Faces コンポーネント」ドロワーを開きます。
  4. 「ラジオ・ボタン・グループ」を新しい行にドラッグします。
  5. ラジオ・ボタン・グループをクリックして、選択します。
  6. プロパティー・ビューが開いていない場合は、「ウィンドウ」 > 「ビューの表示」 > 「プロパティー」の順にクリックして、このビューを開きます。
  7. プロパティー・ビューで、「選択項目の追加」ボタンをクリックします。 「選択項目の追加」ボタンは、プロパティー・ビューの右端にあります。 ボタンの左側にあるテーブルに、ラジオ・ボタン・グループの新しい選択項目がリストされます。
  8. 新しい選択項目の「ラベル」フィールドに、次のテキストを入力します。

    AND

  9. この選択項目の「値」フィールドに、次のテキストを入力します。

    AND

  10. 「選択項目の追加」を再びクリックします。
  11. 2 つ目の選択項目の「ラベル」「値」に、 次のテキストを入力します。

    OR

    終了すると、プロパティー・ビューは次のようになります。
    ラジオ・ボタン・グループのオプションが表示されているプロパティー・ビュー
  12. ページを保存します。
ラジオ・ボタン・グループの追加が終了すると、このページは次のようになります。

顧客検索ページの外観

OR 検索コードをページに追加する

次に、ラジオ・ボタンからの入力によって、 どちらの検索関数を使用するかを決定するように、JSF ハンドラーを 構成する必要があります。
  1. ページのブランク領域を右クリックし、メニューで「ページ・コードの編集」をクリックします。 エディター上で、customersearch.egl ファイルが開きます。
  2. ハンドラーの一番上の変数宣言がある位置に、次のコード行を追加します。
    andOr CHAR(3);
    次に、この変数をラジオ・ボタンにバインドします。 この変数は、ページ上で選択したラジオ・ボタンに応じて、 値 "AND" または "OR" を保持します。
  3. NameAndStateSearch_And への関数呼び出しを次のコードで置き換えます。
    		if (andOr == "AND")
    			SearchLibrary.NameAndStateSearch_And(
    			searchTerms.LastName, 
    			searchTerms.State, searchResults);
    		else
    			SearchLibrary.NameAndStateSearch_Or(
    				searchTerms.LastName, 
    				searchTerms.State, searchResults);
    		end
    関数全体は次のコードのようになります。
    	function searchFunction()
    		searchTerms.LastName = searchTerms.LastName+"%";
    
    		if (andOr == "AND")
    			SearchLibrary.NameAndStateSearch_And(
    			searchTerms.LastName, 
    			searchTerms.State, searchResults);
    		else
    			SearchLibrary.NameAndStateSearch_Or(
    				searchTerms.LastName, 
    				searchTerms.State, searchResults);
    		end
    
    		resultMessage = " customer(s) found.";
    		numberOfResults = searchResults.getSize();
    
    	end

    これで、この関数は andOr 変数の値に応じて異なる関数を呼び出します。

  4. ファイルを保存して閉じます。
  5. customersearch.jsp ページに戻ります。
  6. ページ・データ・ビューで、ページ上のラジオ・ボタン・グループに andOr - char(3) 変数をドラッグして、 ラジオ・ボタン・グループにバインドします。
  7. searchFunction() 関数を、ページ上の「実行」ボタンにバインドします。
  8. ページを保存します。
  9. ページのテストを行います。

ページをテストする際には、新しいラジオ・ボタン機能を使用するようにしてください。 ラジオ・ボタンのいずれか一方を選択して、検索ページが正しく動作することを確認する必要があります。

サンプル・データベース内のレコード数が多くないのに対して、 選択肢となる州の数が多くなるため、 この検索ページもまだ使いやすいとは言えません。 次の演習では、「State」入力フィールドをコンボ・ボックスに変更し、 データベースで使用されている有効な州がすべてリストされるようにします。

これで、customersearch.egl ファイルのコードが完成しました。 このファイル内にエラーがある場合 (赤の X 記号でマークされます) は、演習 3 終了後の customersearch.egl ファイルのファイルに記載されているコードと、作成したコードが一致していることを確認してください。

演習のチェックポイント

同時に 2 つのパラメーターに基づいて検索することもでき、 一方のパラメーターのみに一致する結果を検索することもできる、検索ページを作成しました。

この演習では、次の作業を行う方法を学習しました。
  • EGL ライブラリー内の検索関数に、OR 検索を追加する
  • ラジオ・ボタン・グループを、検索ページに追加する
  • OR 検索コードを、JSF ハンドラーに追加する
  • 新しい検索関数を、ラジオ・ボタン・グループにバインドする
では、『演習 4: コンボ・ボックスに動的にデータを取り込む』に進みましょう。
< 前へ | 次へ >

フィードバック