ドロップダウンリストコンポーネント
を「パレット」の「基本」カテゴリからビジュアルデザイナーにドラッグすることによって、ユーザーがドロップボタンをクリックするとリストから項目を選択できるドロップダウンリスト (またはコンボボックス) を作成できます。
ドロップダウンリストは、最初は 1 つの項目が表示され、クリックすると複数の項目を含むドロップダウンリストが表示される項目リストです。一度に 1 つの項目だけ選択できます。ドロップダウンリストは、Java Swing および Microsoft Windows のコンボボックスに類似していて、HTML では選択リストと呼ばれます。
「items」プロパティーを使用し、データベース表か配列、java.util.Collection、または com.sun.rave.web.ui.model.Option の java.util.Map のいずれかにコンポーネントを関連付けて、リストを生成できます。このプロパティーを設定するには、コンポーネントを右クリックし、「データにバインド」を選択します。「ナビゲータ」ウィンドウで、リストに追加されるデフォルトのオブジェクトを確認できます。オブジェクトは dropDown1DefaultOptions のような名前です。このプロパティーのデフォルト設定については、後述するドロップダウンリストのデフォルト表示を参照してください。
「 selected 」プロパティーの値に管理 Bean のプロパティーに対応する式を設定することで現在の選択項目を表すモデルオブジェクトにコンポーネントを関連付けます。「 selected 」プロパティーをバインドするには、コンポーネントを右クリックし、「プロパティーのバインド」を選択します。
コンポーネントがはじめて描画されると、モデルオブジェクトに equals メソッドが使用され、モデルオブジェクトの「 selected 」プロパティーの値に対応するオプションが選択状態で示されます。
このコンポーネントでは、次のことを行うことができます。
Option オブジェクトのほかに、OptionGroup オブジェクトを割り当てて、異なるオプションのグループを作成する。label」プロパティーを設定して、コンポーネントのラベルを指定する (省略可能)。
label」プロパティーはラベルコンポーネントほど柔軟ではありません。コンポーネントに対するラベルの位置など、ラベルの外観をより制御したい場合は、ラベルコンポーネントを使用できます。validate メソッド内にカーソルが置かれた状態で Java エディタが開き、このコンポーネントの値の妥当性を検査するコードを挿入できます。processValueChange メソッド内にカーソルが置かれた状態で Java エディタが開き、このコンポーネントの値に変更があったときに実行するコードを挿入できます。このメソッドは、コンポーネントのポップアップメニューから「変更時に自動送信」を選択すると実行されるようになります。「変更時に自動送信」によって、コンポーネントの値が変化したときにページが送信されるからです。この機能は、コンポーネントが仮想フォームに含まれている場合に便利です。common_timeoutSubmitForm(this.form, '<コンポーネント ID>'); に設定されます。このコードによって、実行時にユーザーがコンポーネントの値を変更した場合に自動的にフォームが送信されます。フォームが送信されたら、サーバーで変換と妥当性検査が行われ、値変更のリスナーメソッドがある場合はそのメソッドが実行されてから、ページが再表示されます。
ページが送信されるときに実行するコードがある場合は、上記の processValueChange メソッドにそのコードを追加します。
「変更時に自動送信」が設定されているコンポーネントには、仮想フォームを使用して、フォームの送信時に処理される入力フィールドを制限できます。自動送信するコンポーネントを、仮想フォームを送信するように定義した場合、自動送信時には仮想フォームに含まれるフィールドだけが処理されます。
「データにバインド」ダイアログで説明しているように、コンポーネントの「items」プロパティーをオブジェクトまたはデータプロバイダにバインドします。
items」プロパティーをオブジェクトにバインドするには、「オブジェクトにバインド」タブを選択し、リストの生成に使用する Bean プロパティーを選択します。この Bean プロパティーは、メンバーがすべて com.sun.rave.web.ui.model.Option のサブクラスである Object 型の配列、マップ、またはコレクションである必要があります。
items 」プロパティーを、リストの生成に使用するデータベース表、Web サービス、または エンタープライズ Bean のデータプロバイダにバインドするには、「データプロバイダにバインド」タブを選択し、データプロバイダを選択します。selected」プロパティーを Object 配列、プリミティブの配列、または ArrayList にバインドします。配列をプロパティーとしてセッション Bean などの管理 Bean に追加している必要があります。この Bean プロパティーを使用して、ページ送信後にユーザーの選択内容を評価できます。dropDown#DefaultOptions オブジェクトを編集してリスト項目の表示と値を変更し、ドロップダウンリストが最初に表示されるときにデフォルトで選択される項目を選びます。通常は、上記の「データにバインド」で説明したように、「 items 」プロパティーを、リスト項目の設定に使用するデータベースまたはオブジェクトにバインドします。 デフォルトでは、ドロップダウンリストは、デフォルトのコンポーネント ID に基づく名前を持つ SingleSelectOptionsList 型のオブジェクトを使用して、リスト項目を表示します。たとえば、ページにはじめてドロップした最初のドロップダウンリストは、dropDown1 という名前が付けられます。また、「ナビゲータ」ウィンドウには、ドロップダウンリストに関連付けられた dropDown1DefaultOptions 配列オブジェクトが表示されます。
この配列オブジェクトの値を設定するには、ドロップダウンリストコンポーネントを右クリックし、「デフォルトオプションを設定」を選択して「オプションカスタマイザ」ダイアログを開きます。このダイアログでは、新しい項目を追加したり、既存の項目を削除したりできます。また、各項目ごとに、表示する値 (「表示」) や項目の値 (「値」) を設定できます。さらに、デフォルトで表示する項目 (「選択」) を選択することもできます。dropDown#DefaultOptions オブジェクトは配列で、「label」フィールドには「表示」の値、および「value」フィールドには「値」の値が保存されます。
次のコード例には、現在選択されている項目を決めるために、このオブジェクトおよびドロップダウンリストの「selected」プロパティーを使用し、「表示」および「値」の値 (「label」および「value」) を表示用の 2 つの静的テキストフィールドに入力する方法が示されています。ドロップダウンリストと 2 つの静的テキストコンポーネントをページに追加し、上記で説明しているようにドロップダウンリストの processValueChange メソッドにこのコードを追加し、コンポーネントに対して「変更時に自動送信」を選択する場合、ユーザーがリスト内の項目を選択すると、「表示」および「値」の値が 2 つの静的テキストフィールドに表示されます。
String myvalue = (String)dropDown1.getSelected();
int numOptions = dropDown1DefaultOptions.getOptions().length;
int i = 0;
for (i = 0; i < numOptions; i++) {
if (myvalue.equals(dropDown1DefaultOptions.getOptions()[i].getValue()))
break;
}
if (i < numOptions) {
staticText1.setText(dropDown1DefaultOptions.getOptions()[i].getLabel());
staticText2.setText(dropDown1DefaultOptions.getOptions()[i].getValue());
} else {
staticText1.setText("not found"); // should not get here
}