JSF 単一選択コントロールの変数へのバインディング

JSF 単一選択コントロール (コンボ・ボックス、ラジオ・ボタンのグループなど) を EGL 変数にバインドする作業は、入力コントロールや出力コントロールのバインディング作業よりも複雑になります。 これは、2 つの EGL 変数、すなわちコントロールのオプションの変数と、選択した値の変数を使用する必要があるからです。

通常、選択したオプションの値を保持するための単一変数のほかに、オプションを表す配列をコントロール内に作成することが必要です。 これを行うには、ストリングの配列を定義し、コントロールのオプションをその配列に取り込む方法が、もっとも簡単です。『選択オプションとしてストリングの配列を使用する』を参照してください。 他にも、コントロールのオプションとして、レコードの配列を使用することもできますこの場合は、コントロールに表示されるオプションとして、また選択の値として、 レコード内のフィールドを指定します。『選択オプションとしてレコードの配列を使用する』を参照してください。

選択オプションとしてストリングの配列を使用する

  1. JSF ハンドラーで、単一選択コントロールのオプションを保持する、ストリングの配列を作成します。
    selectionOptions string[4];
  2. 配列に値を割り当てます。配列に対して、値を動的に割り当てることもできますし、単にリテラル値を割り当てることもできます。
    selectionOptions string[4]
       {"First choice", "Second choice",
        "Third choice", "Fourth choice"};
  3. 選択したオプションを保持するストリング変数を作成します。
    selectedChoice string;
  4. オプションのリストに SelectedValueItem プロパティーを追加することで、オプションのリストから選択されたオプションを、単一の変数が受け取るように指示します。
    selectionOptions string[4]
       {"First choice", "Second choice",
        "Third choice", "Fourth choice",
        SelectedValueItem = selectedChoice};
  5. JSF ハンドラーを保管して、生成します。
  6. JSF ハンドラーに関連付けられているページ上で、オプションのリストを表す変数 (この場合は、selectionOptions) を、「ページ・データ」ビューからページにドラッグします。「リスト・コントロールの挿入」ウィンドウ が開きます。
  7. 「リスト挿入のコントロール」ウィンドウで、「既存レコードの表示 (Displaying an existing record)」をクリックします。
  8. 「コントロール・タイプ」において、ページ上に置く単一選択 JSF コントロールのタイプを選択します。

    「コンボ・ボックス」(リスト・ボックスまたはドロップダウン・メニューとも呼ばれます)、「リスト・ボックス - 単一選択」「ラジオ・ボタン・グループ」の中から選択できます。いずれの場合にも、オプションのリストにある要素の数に応じて、実行時にオプションが動的に追加されます。

  9. 「終了」をクリックします。コントロールがページに追加され、JSF ハンドラーの変数に自動的にバインドされます。

どの変数に JSF コントロールがバインドされたかを、確認することができます。 対象のコントロールをクリックして選択し、「プロパティー」ビューを開いてください。 「プロパティー」ビューの「値」フィールドに、選択したオプションの値を受け取る変数が表示されます。また、このビューの右側にある変数の表には、コントロールのオプションを提供するために使用される変数がリストされます。

この方法で単一選択コントロールを使用する 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 レコード・プロパティーを使用して指示します。

選択オプションとしてレコードの配列を使用するには、以下のステップを実行します。

  1. レコード・パーツで @SelectionList を使用して、レコード内のどのフィールドを選択オプションにするか (labelItem)、およびどのフィールドをオプションの値にするか (valueItem) を指定します。
    record optionsRec type BasicRecord
       {@SelectionList {labelItem = displayOption, 
                        valueItem = optionValue}}
        displayOption  string;
        optionValue    string;
    end
    レコードには他のフィールドを組み込むこともできますが、 ラベルおよび値にするものとして、これらのフィールドの中から 2 つ選択する必要があります。
  2. JSF ハンドラーで、このレコード・パーツを基に配列を作成します。
    selectionOptions optionsRec[3];
  3. 配列に値を割り当てます。配列に対して、値を動的に割り当てることもできますし、単にリテラル値を割り当てることもできます。 この配列の値の設定をする場合に、onPreRenderFunction を使用してもかまいません。
    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
  4. 選択されたオプションを受け取る、単一の変数を作成します。
    selectedChoice string;
    この変数のタイプは、レコード・パーツで valueItem としてマークされたフィールドのタイプと、一致する必要があります。
  5. オプションのリストに SelectedValueItem プロパティーを追加することで、オプションのリストから選択されたオプションを、単一の変数が受け取るように指示します。
    selectionOptions optionsRec[3]
       {selectedValueItem = selectedChoice};
  6. JSF ハンドラーを保管して、生成します。
  7. JSF ハンドラーに関連付けられているページ上で、選択オプションのリストを表す変数 (この場合は、selectionOptions) を、「ページ・データ」ビューからページにドラッグします。「リスト・コントロールの挿入」ウィンドウ が開きます。
  8. 「リスト挿入のコントロール」ウィンドウで、「既存レコードの表示 (Displaying an existing record)」をクリックします。
  9. 「コントロール・タイプ」において、ページ上に置く単一選択 JSF コントロールのタイプを選択します。

    「コンボ・ボックス」(リスト・ボックスまたはドロップダウン・メニューとも呼ばれます)、「リスト・ボックス - 単一選択」「ラジオ・ボタン・グループ」の中から選択できます。いずれの場合にも、選択オプションの リストにある要素の数に応じて、実行時にオプションが動的に追加されます。

  10. 「終了」をクリックします。コントロールがページに追加され、JSF ハンドラーの変数に自動的にバインドされます。

どの変数に JSF コントロールがバインドされたかを、確認することができます。 対象のコントロールをクリックして選択し、「プロパティー」ビューを開いてください。 「プロパティー」ビューの「値」フィールドに、選択したオプションの値を受け取る変数が表示されます。また、このビューの右側にある変数の表には、コントロールのオプションを提供するために使用される変数がリストされます。

この方法で単一選択コントロールを使用する 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 単一選択コントロールでユーザーが選択したオプションのテキストが、出力コントロールによって表示されます。

フィードバック