JSF には、チェック・ボックスの「選択列」をデータ・テーブルに組み込む機能が用意されています。 このチェック・ボックスの列を使うと、テーブルの行を選択して (複数可)、それを対象に特定のアクションを実行することができます。例えば、複数の行を選択して、削除することが可能です。
特定の配置のプロパティーを、レコードの配列に設定して、その配列を選択列付きで Web ページに表示するよう指示することができます。 これによって、ユーザーは、チェック・ボックスを 1 つ以上選択できるようになります。EGL は、選択された行のインデックスを表す整数の配列を戻すことによって、どの行が選択されたかを示します。例えば、データ・テーブルの 1 行目と 3 行目と 4 行目のチェック・ボックスが選択された場合、EGL は整数の配列を [1,3,4] に設定します。EGL によって、0 ベースの JSF 配列が 1 ベースの EGL 配列に自動的に変換されます。
purchaseList customerPurchase[3];
このサンプルでは、次のレコード・パーツのサンプルを使用します。
record customerPurchase type BasicRecord
custName string;
totalPurchases decimal(10,2);
end
allSelectedRows int[0];
purchaseList customerPurchase[3]
{selectedRowItem = allSelectedRows};
このテーブルに、チェック・ボックス要素を含む、ラベルなしの小さな列を組み込みます。 このチェック・ボックス・コントロールをクリックして選択すると、「プロパティー」ビューが表示されます。 そのチェック・ボックスが、レコード変数のどのフィールドにもバインドされておらず、選択した行のインデックスを保持するように定義した整数配列にバインドされていることを、このビューで確認することができます。
例えば、次のようにして、この JSF ハンドラーで選択列を使用します。
handler multiSelectPage type JSFHandler
{onPreRenderFunction = onPreRender,
view = "multiSelectPage.jsp"}
//Array of customer records and their purchase amount
purchaseList customerPurchase[3]
{selectedRowItem = allSelectedRows};
//indexes of the selected rows
allSelectedRows int[0];
//Sum of selected purchases
purchaseSum decimal(10,2);
function onPreRender()
//initialize the array of customers
purchaseList[1].custName = "Company A";
purchaseList[1].totalPurchases = "500.23";
purchaseList[2].custName = "Company B";
purchaseList[2].totalPurchases = "232.55";
purchaseList[3].custName = "Company C";
purchaseList[3].totalPurchases = "499.12";
end
function sumRows()
purchaseSum = 0;
counter int = 0;
customerIndexToAdd int;
for (counter from 1 to allSelectedRows.getSize() by 1)
customerIndexToAdd = allSelectedRows[counter];
purchaseSum += purchaseList[customerIndexToAdd].totalPurchases;
end
end
end
record customerPurchase type BasicRecord
custName string;
totalPurchases decimal(10,2);
end
このサンプルでは、JSF データ・テーブルを作成するために purchaseList 配列をページにドラッグし、sumRows 関数と purchaseSum 変数をそれぞれ、Web ページのコマンド・ボタンと出力コントロールにバウンドしているものとします。