{TWBSCR} {TWBSCR}

Übung 2.3: Clientseitige Daten erstellen und konfigurieren

Bevor Sie mit dieser Übung beginnen, müssen Sie zuerst Übung 2.2: Serverseitige Daten hinzufügen ausführen.

In dieser Übung werden Sie lernen, wie Sie clientseitige Daten hinzufügen. Dazu muss auf der Basis einer zuvor erstellten, serverseitigen JavaBean ein clientseitiges Datenobjekt für eine Seite erstellt und nach Bedarf konfiguriert werden.

Clientseitiges Datenobjekt erstellen

Auf gleiche Weise, wie Sie Ihre JavaBean in der Seitendatensicht erstellt haben, werden Sie ein äquivalentes Clientdatenobjekt erstellen.

  1. Stellen Sie sicher, dass die Datei tutorial.jsp geöffnet ist.
  2. Klicken Sie in der Clientdatensicht (in der Nähe der Registerkarte für Seitendaten) mit der rechten Maustaste auf eine freie Stelle, und wählen Sie Neu > Clientdaten aus.
  3. Wählen Sie die JavaBean root im Abschnitt Server-Datenmodell aus, und klicken Sie auf OK.

Sie sehen nun die JavaBean root in Ihrer Clientdatensicht. Der einzige wesentliche Unterschied zwischen der JavaBean in 'Clientdaten' und der JavaBean in 'Seitendaten' besteht in dem Feld 'purchaseDate' im Abschnitt 'Users/Portfolios/Positions'. Bei clientseitigen Daten werden Datumsangaben ähnlich wie Zeichenfolgen als Basistypen behandelt.

Hinweis: Wenn ein Modell eine Eigenschaft des Typs BigDecimal hat, beachten Sie, dass Dezimalzahlen mit beliebiger Genauigkeit auf der Clientseite nicht unterstützt und auf zwei Stellen gerundet werden. Dies bedeutet, dass die Genauigkeit Ihrer Daten möglicherweise nicht mehr gegeben ist, wenn Sie BigDecimal-Werte verwenden.

Beim Erstellen von clientseitigen Datenobjekten generieren die Tools eine Reihe von Dateien und Klassen in Ihrem Projekt. Im Quellenpaket Ihres Stammverzeichnisses wird eine Eigenschaftendatei namens 'OdysseyBrowserFramework.properties' erstellt, sofern diese nicht bereits vorhanden ist. Im Paket com.ibm.dynwdo4jsmediators werden zwei Dateien erstellt, und die Eigenschaftendatei wird zur Registrierung dieser beiden Dateien für das Projekt bearbeitet:

Das Paket com.ibm.dynwdo4jsmediators.root enthält speziell generierte Mediator- und Diff-Handler-Dateien:

Clientdatensicht mit JavaBean

Clientseitiges Datenobjekt konfigurieren

In diesem Abschnitt lernen Sie, wie Sie clientseitige Daten für folgende Aktionen konfigurieren:

Um das Tool Clientdaten konfigurieren zu starten, das Sie für den Rest dieser Übung durchgehend verwenden werden, wechseln Sie zur Clientdatensicht. Klicken Sie mit der rechten Maustaste auf den Knoten root, und wählen Sie Konfigurieren aus. Das Tool Clientdaten konfigurieren wird angezeigt.

Tool zum Konfigurieren von Clientdaten

Modellname

Wenn Sie eine JavaBean erstellen, wird standardmäßig der Name der JavaBean intern zur Darstellung des Modellnamens verwendet, wenn das Modell in den Browser exportiert wird. Dies ist für Ihre Webanwendung jedoch nicht in allen Fällen wünschenswert. Vor allem in einer Portalumgebung empfiehlt es sich eher, einen allgemeinen Namen zu verwenden, sodass die Modelldaten im Browser von mehreren Portlets gemeinsam genutzt werden können. Umgekehrt möchten Sie unter Umständen sicherstellen, dass Ihr Modell nur für Ihr Portlet bestimmt ist und Sie ihm daher für das Portlet einen bestimmten Namen geben wollen.

Stellen Sie in jedem Fall sicher, dass Ihr Modellname nicht zu allgemein gehalten ist. Der Name Root beispielsweise wäre sicher problematisch, da andere Anwendungsentwickler denselben Namen verwenden könnten. Der Namespace im Browser ist unstrukturiert, daher würden zwei Modelle desselben Namens zu Konflikten führen. Aus diesem Grund empfiehlt es sich in der Regel, komplexe Namen zu verwenden, die Java-Klassennamen wiedergeben. Beispiel: com_ibm_myApp_myModel.

Für diesen Lerntext können Sie den Standardnamen für das Modell übernehmen.

Bereinigen der clientseitigen Datenstruktur

In manchen Fällen erhalten Sie vom Server unnötig viele Daten, da nicht immer unbedingt alle Klassen oder Attribute an den Client gesendet werden müssen. Das Clientdatenobjekt kann so konfiguriert werden, dass unerwünschte Klassen oder Attribute bereinigt werden.

  1. Erweitern Sie im Fenster Clientdatenmodell unter der Registerkarte 'Grundlagen' root (Root).
  2. Wählen Sie die Markierungsfelder vor den Knoten stocks (Stock[]) und placeHolderStock (Stock) unter dem Knoten root ab.
  3. Wählen Sie die Markierungsfelder vor den Knoten portfolio (Portfolio) und user (User) unter dem Knoten root/users/portfolio/positions ab. Diese Rückwärtszeiger sind häufig erforderlich, um bei der Programmierung mit komplexen Datenstrukturen die Leistung zu verbessern; in diesem Lerntext sind sie jedoch eher hinderlich, da sie eine rekursive Struktur erzeugen, die die endgültige Darstellung der Daten in der Clientdatensicht kompliziert.

Hinweis: Wird eine Klasse in einer bestimmten Datenstruktur mehrfach verwendet und werden ihre Felder von beliebiger Stelle aus angepasst, wirken sich diese Änderungen überall dort aus, wo die Klasse verwendet wird. Wenn Sie dies einmal ausprobieren wollen, aktivieren Sie die Eigenschaft root.users.portfolios.user, und wählen Sie einige Markierungsfelder aus. Sie werden sehen, dass dieselben Felder automatisch im Verweis auf die Klasse User unter Root aktualisiert werden.

Primärattribute definieren

Sie können konfigurieren, wie die Identität Ihres Objekts erkannt wird. Wenn Sie auf eine feste Eigenschaft einer Klasse klicken, beispielsweise auf die Eigenschaft name von root, sehen Sie ein ausgewähltes Markierungsfeld mit dem Namen "Primär".

Angenommen, es sind zwei Exemplare derselben Klasse vorhanden - wie können Sie unterscheiden, ob es sich jeweils um dieselbe handelt oder nicht? Wenn zwei Benutzer vorhanden sind, also die Klasse Users zweimal vorhanden ist, wie können Sie unterscheiden, ob es sich jeweils um dieselbe handelt oder nicht? Sie können die beiden Klassen erst dann sicher voneinander unterscheiden, wenn Sie wissen, welches Element von User das Exemplar eindeutig kennzeichnet: der Primärschlüssel. Weitere Informationen zu den Primärschlüsseln.

  1. Wenn Sie den Knoten 'users' erweitern, sehen Sie vier Eigenschaften: refNum, lastName, id und portfolios. Die Definition der Klasse bestimmt, dass das Feld refNum für zwei unterschiedliche Benutzer (Klassenexemplare) definitiv eindeutig ist, sodass nur dieses Feld als Primärfeld markiert werden muss. Wenn Sie die übrigen Felder betrachten sehen Sie, dass refNum, lastName und ID alle als Primärfelder markiert wurden. Standardmäßig werden alle Felder als Primärfelder markiert, die keine Liste und kein Bereich sind. Das System kann nicht erkennen, welche Felder Primärfelder sind und welche nicht.
  2. Sie müssen die Felder jeweils gezielt als "Primär" markieren bzw. die entsprechende Markierung aufheben. Auch wenn es nicht zwingend erforderlich ist (die Standardeinstellungen funktionieren), sollten Sie besser überprüfen, dass die Primärfelder in Ihrem Modell richtig definiert wurden. Gehen Sie die Datenstruktur durch und stellen Sie sicher, dass nur die unten aufgelisteten Felder als Primärfelder für diesen Lerntext markiert sind:
    Klasse Feld
    Root Name
    Users refNum
    Portfolio user, porfolioName
    Position refNum
    Stock Symbol

Clientattribut hinzufügen

Sie werden die Datenrasterkomponente verwenden, um den Inhalt eines bestimmten Portfolios (seine Positionen) anzuzeigen. Entsprechend seiner Datenstruktur enthält die Klasse Position acht Attribute: price (der Kaufpreis), quantity (die Anzahl Aktien), refNum (die Referenznummer), symbol (das Börsensymbol), purchaseDate (das Kaufdatum), stock (die gekaufte Aktie), portfolio (das Portfolio, zu dem diese Position gehört) und user (der Eigner der Position).

Etwas fehlt noch: die Eigenschaft value (Wert), die der Anzahl Aktien multipliziert mit dem aktuellen Wert/Preis der Aktie entspricht. Eine Möglichkeit, diese Information bereitzustellen, bestünde darin, die JavaBeans zu ändern und das Produkt dort berechnen zu lassen. Dies ist jedoch problematisch, da dieser berechnete Wert nur eine Momentaufnahme darstellen würde: wenn quantity im Browser geändert würde, würde diese Änderung nicht im berechneten Wert berücksichtigt. Um diese Prozedur zu vermeiden, verwenden Sie ein Clientattribut, d. h. einen beliebigen JavaScript-Ausdruck, der im Kontext des Objekts ausgeführt wird, für das er erstellt wurde.

  1. Wählen Sie im Dialogfenster Clientdaten konfigurieren den Knoten positions unter users und portfolios aus.
  2. Klicken Sie auf Clientattribut hinzufügen. In der Liste der Attribute wird für die Klasse Position ein neuer Eintrag erstellt.
  3. Wählen Sie float als Typ aus, und benennen Sie den Feldwert, da Sie dort ein Dollarzeichen speichern werden.
  4. Geben Sie in den Textbereich Ausdruck den folgenden Ausdruck ein:
    this.eGet('quantity')*this.eGet('stock').eGet('currentPrice')
    Korrekte Felder zum Hinzufügen eines Attributs

    Dieser Ausdruck verwendet das SDO-Objekt im Browser, und die Methode eGet kann mit einer Zeichenfolge aufgerufen werden, die das abzurufende Attribut beschreibt. Wenn das Attribut eine Liste oder ein Bereich in den serverseitigen Daten ist, gibt eGet einen JavaScript-Bereich im Browser zurück. Das Feld quantity dieses Objekts position wird mit dem Feld currentPrice des Objekts stock multipliziert, auf das von diesem Objekt position verwiesen wird. Im Browser wird dieser Ausdruck jedes Mal ausgewertet, wenn das neue Attribut angefordert wird und wird daher mit den Werten quantity und currentPrice synchronisiert.

    In den Textbereich Ausdruck kann ein beliebiger, gültiger JavaScript-Ausdruck eingegeben werden. Sie können beispielsweise eine Funktion verwenden, die bei zwei gegebenen Werten einen Prozentsatz zurückgibt. Sie könnten auch ein Feld aufnehmen, das die Gesamtsumme für das gesamte Portfolio anzeigt, indem die einzelnen Positionen durchlaufen werden und eine Gesamtsumme addiert wird. Sie können beliebige, vorhandene Funktionen aufrufen, einschließlich angepasster JavaScript-Funktionen, die Sie selbst geschrieben haben. Es sind insgesamt nur zwei Regeln zu beachten:
    1. Der Zeiger this verweist auf ein Exemplar der Klasse, für die das Attribut erstellt wurde. Der Ausdruck muss einen Wert zurückgeben, der mit dem für das Attribut angegebenen Typ kompatibel ist.
    2. Wenn das Attribut als Ganzzahl definiert wurde und ein Ausdruck eine Zeichenfolge zurückgibt, die nicht in eine Ganzzahl umgewandelt werden kann, wird eine Laufzeitausnahmebedingung ausgegeben.
    Hinweis: Achten Sie darauf, dass Ihr Ausdruck nicht von einem anderen Clientattribut abhängt, das ebenfalls einen Ausdruck mit einer Abhängigkeit zu diesem Attribut hat. Solch eine Abhängigkeit verursacht eine Endlosschleife, und im Browser würde eine Ausnahmebedingung in Bezug auf Stacküberlauf ausgegeben. Dies ist dieselbe Problematik, die auch beim Schreiben von Java-Code zu vermeiden ist.

Registerkarte 'Erweitert'

Auch wenn die Registerkarte "Erweitert" in diesem Lerntext nicht verwendet wird, sollten Sie doch die Funktion der darin enthaltenen Schaltflächen kennen. Mit EMap-Quelle laden können Sie auf eine Schlüsseldatei im System zugreifen, mit der Sie konfigurieren können, wie serverseitige Daten an den Browser gesendet und zur Diff-Verarbeitung zurückgegeben werden. Das Konfigurationsprogramm stellt eine Schnittstelle zur Verfügung, mit der die Informationen in dieser Datei konfiguriert werden können. Diese Datei sollte nur von fortgeschrittenen Benutzern bearbeitet werden.

Verwenden Sie die zweite Schaltfläche, Erneut aus serverseitigen Daten generieren, um die Clientdateninformationen zu aktualisieren, falls Ihre Serverdaten geändert werden. Derzeit gibt das Clientdatenobjekt keine möglicherweise an Ihren Serverdatenquellen vorgenommenen Änderungen wieder; Sie müssen daher Ihre internen Ressourcen erneut generieren, um beispielsweise neue Felder zu übernehmen.

Mit Aus Projekt entfernen können Sie alle Clientdatenartefakte aus Ihrem Projekt entfernen. Dies ist beim Testen nützlich bzw. in einem frühen Stadium der Entwicklung, in dem Ihre Seiten und die enthaltenen Daten noch nicht endgültig sind. Wenn Sie einen Knoten in der Clientdatensicht auswählen, entfernen Sie nur den Eintrag für diese Seite, die beim ersten Erstellen des Clientdatenelements generierten Artefakte verbleiben weiterhin in Ihrem Projekt. Wenn Sie alle Artefakte entfernen wollen, müssen Sie sie einzeln entfernen.

Sie können nun mit Übung 2.4: Die Datenrasterkomponente konfigurieren beginnen.

Nutzungsbedingungen | Feedback
(C) Copyright IBM Corporation 2000, 2005. Alle Rechte vorbehalten.