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.
- Eine Feldgruppe mit Datensätzen, die die Daten in der Tabelle sind
- Eine Feldgruppe mit Ganzzahlen für die Indizes der ausgewählten Datensätze
- Ein EGL-Webprojekt mit mindestens einer Webseite
- Ein Datensatzabschnitt, der auf der Webseite angezeigt werden soll
- 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:
In diesem Beispiel wird der folgende Beispieldatensatzabschnitt verwendet:purchaseList customerPurchase[3];record customerPurchase type BasicRecord custName string; totalPurchases decimal(10,2); end - 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.
- Erstellen Sie die Feldgruppe mit Ganzzahlen für die Indizes der ausgewählten Datensätze:
allSelectedRows int[0]; - 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}; - 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.
- 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.
- 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.
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.