JSF 単一選択コントロール (コンボ・ボックス、ラジオ・ボタンのグループなど) を EGL 変数にバインドする作業は、入力コントロールや出力コントロールのバインディング作業よりも複雑になります。 これは、2 つの EGL 変数、すなわちコントロールのオプションの変数と、選択した値の変数を使用する必要があるからです。
通常、選択したオプションの値を保持するための単一変数のほかに、オプションを表す配列をコントロール内に作成することが必要です。 これを行うには、ストリングの配列を定義し、コントロールのオプションをその配列に取り込む方法が、もっとも簡単です。『選択オプションとしてストリングの配列を使用する』を参照してください。 他にも、コントロールのオプションとして、レコードの配列を使用することもできますこの場合は、コントロールに表示されるオプションとして、また選択の値として、 レコード内のフィールドを指定します。『選択オプションとしてレコードの配列を使用する』を参照してください。
selectionOptions string[4];
selectionOptions string[4]
{"First choice", "Second choice",
"Third choice", "Fourth choice"};
selectedChoice string;
selectionOptions string[4]
{"First choice", "Second choice",
"Third choice", "Fourth choice",
SelectedValueItem = selectedChoice};
「コンボ・ボックス」(リスト・ボックスまたはドロップダウン・メニューとも呼ばれます)、「リスト・ボックス - 単一選択」、「ラジオ・ボタン・グループ」の中から選択できます。いずれの場合にも、オプションのリストにある要素の数に応じて、実行時にオプションが動的に追加されます。
どの変数に JSF コントロールがバインドされたかを、確認することができます。 対象のコントロールをクリックして選択し、「プロパティー」ビューを開いてください。 「プロパティー」ビューの「値」フィールドに、選択したオプションの値を受け取る変数が表示されます。また、このビューの右側にある変数の表には、コントロールのオプションを提供するために使用される変数がリストされます。
handler singleSelect type JSFHandler
{view = "singleSelect.jsp"}
selectionOptions string[4]
{"First choice","Second choice",
"Third choice","Fourth choice",
SelectedValueItem = selectedChoice};
selectedChoice string;
outputMessage string;
function getChoice()
outputMessage = "You chose: "
+ selectedChoice;
end
end
このサンプルでは、selectionOptions
変数をページにドラッグしてあり、この変数を基にしてコンボ・ボックス、リスト・ボックス、またはラジオ・ボタンのグループを作成してあることが、前提となっています。
さらに、outputMessage 変数を出力コントロールにバインドし、getChoice 関数をページのボタンにバインドすることが必要になります。
このボタンをクリックすると、JSF 単一選択コントロールでユーザーが選択したオプションのテキストが、出力コントロールによって表示されます。ストリングの配列を選択オプションとして使用する方式は、シンプルではありますが、最も便利であるとはいえません。レコードの配列からオプションを取り出したり、オプションで使用した値とは異なる値を選択結果の変数に渡したりすることが、必要な場合があります。この例では、オプションおよび選択した値に対して、レコード内のどのフィールドを使用するかを、@SelectionList レコード・プロパティーを使用して指示します。
選択オプションとしてレコードの配列を使用するには、以下のステップを実行します。
record optionsRec type BasicRecord
{@SelectionList {labelItem = displayOption,
valueItem = optionValue}}
displayOption string;
optionValue string;
end
レコードには他のフィールドを組み込むこともできますが、
ラベルおよび値にするものとして、これらのフィールドの中から 2 つ選択する必要があります。selectionOptions optionsRec[3];
function onPreRender()
selectionOptions[1].displayOption = "Option one";
selectionOptions[1].optionValue = "first option";
selectionOptions[2].displayOption = "Option two";
selectionOptions[2].optionValue = "second option";
selectionOptions[3].displayOption = "Option three";
selectionOptions[3].optionValue = "third option";
end
selectedChoice string;
この変数のタイプは、レコード・パーツで
valueItem としてマークされたフィールドのタイプと、一致する必要があります。selectionOptions optionsRec[3]
{selectedValueItem = selectedChoice};
「コンボ・ボックス」(リスト・ボックスまたはドロップダウン・メニューとも呼ばれます)、「リスト・ボックス - 単一選択」、「ラジオ・ボタン・グループ」の中から選択できます。いずれの場合にも、選択オプションの リストにある要素の数に応じて、実行時にオプションが動的に追加されます。
どの変数に JSF コントロールがバインドされたかを、確認することができます。 対象のコントロールをクリックして選択し、「プロパティー」ビューを開いてください。 「プロパティー」ビューの「値」フィールドに、選択したオプションの値を受け取る変数が表示されます。また、このビューの右側にある変数の表には、コントロールのオプションを提供するために使用される変数がリストされます。
handler singleSelect type JSFHandler
{view = "singleSelect.jsp",
onPreRenderFunction = onPreRender}
selectionOptions optionsRec[3]
{selectedValueItem = selectedChoice};
selectedChoice string;
outputMessage string;
function onPreRender()
selectionOptions[1].displayOption = "Option one";
selectionOptions[1].optionValue = "first option";
selectionOptions[2].displayOption = "Option two";
selectionOptions[2].optionValue = "second option";
selectionOptions[3].displayOption = "Option three";
selectionOptions[3].optionValue = "third option";
end
function getChoice()
outputMessage = "You chose: "
+ selectedChoice;
end
end
record optionsRec type BasicRecord
{@SelectionList {labelItem = displayOption,
valueItem = optionValue}}
displayOption string;
optionValue string;
end
このサンプルでは、selectionOptions
変数がページにドラッグされていること、およびコンボ・ボックス、リスト・ボックス、またはラジオ・ボタンのグループが、この変数を基に作成されていることが前提となっています。さらに、outputMessage 変数を出力コントロールにバインドし、getChoice 関数をページのボタンにバインドすることが必要です。このボタンをクリックすると、JSF 単一選択コントロールでユーザーが選択したオプションのテキストが、出力コントロールによって表示されます。