Die Indizes ausgewählter Zeilen in eine Datentabelle zurückgeben

In JSF wird die Möglichkeit zum Einbinden einer Auswahlspalte mit Kontrollkästchen in einer Datentabelle bereitgestellt. Mit dieser Spalte mit Kontrollkästchen können Sie mehrere Zeilen in der Tabelle auswählen, um bestimmte Aktionen für diese vorzunehmen. Sie können zum Beispiel mehrere Zeilen zum Löschen markieren.

Sie können eine bestimmte Anordnung von Eigenschaften in einer Feldgruppe aus Datensätzen festlegen, um anzugeben, dass diese Feldgruppe auf einer Webseite mit einer Auswahlspalte angezeigt werden soll. Der Benutzer kann dann mehrere Kontrollkästchen auswählen. In EGL wird angezeigt, welche Zeilen ausgewählt wurden, indem eine Feldgruppe mit Ganzzahlen zurückgegeben wird, mit denen die Indizes der ausgewählten Zeilen dargestellt werden. Wenn zum Beispiel Kontrollkästchen für die erste, dritte und vierte Zeile in der Datentabelle ausgewählt werden, wird die Feldgruppe mit Ganzzahlen in EGL auf [1,3,4] festgelegt. In EGL werden 0-basierte JSF-Feldgruppen automatisch in 1-basierte EGL-Feldgruppen konvertiert.

Dabei sind zwei Feldgruppen erforderlich, damit mehrere Zeilen in einer JSF-Datentabelle ausgewählt werden können:
Für diese Task gelten die folgenden Voraussetzungen:
Führen Sie diese Schritte aus, um eine Datentabelle mit einer Mehrfachauswahlspalte einzurichten. In diesem Beispiel wird eine Liste mit Kunden und deren Gesamteinkäufen angezeigt und Sie können mehrere Zeilen auswählen und addieren.
  1. Erstellen Sie im JSF-Handler für eine EGL-gesteuerte Webseite eine Feldgruppe mit Datensätzen zum Darstellen der Tabelle der auf der Seite anzuzeigenden Daten:
    purchaseList customerPurchase[3];
    In diesem Beispiel wird der folgende Beispieldatensatzabschnitt verwendet:
    record customerPurchase type BasicRecord
        custName        string;
        totalPurchases  decimal(10,2);
    end
  2. Rufen Sie die Daten ab, um diese Feldgruppe mit den Daten zu füllen, aus denen der Benutzer auf der Seite auswählen soll. Im Beispiel weiter unten in diesem Kapitel werden Literalwerte zur Feldgruppe hinzugefügt, Sie können jedoch die Daten aus einer Datenbank abrufen oder die Feldgruppe auf eine andere Weise füllen. Möglicherweise möchten Sie diese Abruflogik in die in der Eigenschaft 'onPreRenderFunction' des JSF-Handlers angegebene Funktion einfügen.
  3. Erstellen Sie die Feldgruppe mit Ganzzahlen für die Indizes der ausgewählten Datensätze:
    allSelectedRows  int[0];
  4. Legen Sie für die Datensatzvariable die Eigenschaft 'selectedRowItem' auf den Namen der Feldgruppe fest, die die Indizes der ausgewählten Datensätze enthalten soll:
    purchaseList customerPurchase[3]
       {selectedRowItem = allSelectedRows};
  5. Ziehen Sie auf der Webseite die Feldgruppe mit Datensätzen von der Sicht 'Seitendaten' auf die Seite. Das Fenster 'Listenfeld einfügen' wird geöffnet.
  6. Wählen Sie unter 'Listenfeld einfügen' ein Optionsfeld unter 'Steuerelemente erstellen zum' aus. Wenn Sie schreibgeschützte Ausgabesteuerelemente verwenden möchten, wählen Sie 'Anzeigen eines bestehenden Datensatzes' aus. Wenn Sie bearbeitbare Eingabesteuerelemente verwenden möchten, wählen Sie 'Aktualisieren eines bestehenden Datensatzes' aus.
  7. Klicken Sie auf 'Fertig stellen'. Die Datensätze werden auf der Seite als JSF-Datentabelle angezeigt.

    Diese Tabelle enthält eine kleine Spalte ohne Kennzeichnung, die Kontrollkästchenelemente enthält. Wenn Sie auf das Kontrollkästchen klicken, um es auszuwählen, und zur Eigenschaftsansicht wechseln, können Sie sehen, dass dieses Kontrollkästchen nicht an Felder in der Datensatzvariable gebunden ist, sondern an die Feldgruppe mit Ganzzahlen, die Sie für die Indizes der ausgewählten Zeilen definiert haben.

Die Feldgruppe mit den Ganzzahlen enthält nun die Zeilennummern der auf der Webseite ausgewählten Zeilen. Sie können eine Funktion zum Verarbeiten der ausgewählten Datensätze definieren, wenn ein Benutzer auf eine Schaltfläche auf der Seite klickt, zum Beispiel:

Bei diesem JSF-Handler wird zum Beispiel auf folgende Weise eine Auswahlspalte verwendet:

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
In diesem Beispiel wird vorausgesetzt, dass Sie die Feldgruppe purchaseList auf die Seite gezogen haben, um eine JSF-Datentabelle zu erstellen, und dass Sie die Funktion sumRows und die Variable purchaseSum an eine Befehlsschaltfläche bzw. an ein Ausgabesteuerelement auf der Webseite gebunden haben.

Feedback