
Abb. 42: Einstiegsseite, die zu den entprechenden Dialogen verzweigt.
Die Einstiegsseite ermöglicht die Verzweigung in die Dialogbereiche Datenpflege, Navigator und Berichte. Die durch ein Aktive-Image[26] dargestellte Menüleiste, bietet die Möglichkeit, durch das Anklicken eines Menüpunktes, in den entsprechenden Dialog zu verzweigen. Die restlichen Images haben nur einen gestaltenden Charakter. Der Dialog ist durch die WebObjects-Komponente Main.wo implementiert.
Die einzelnen Elemente der Main.wo werden durch ein WebObjects-Objekt gekapselt, das dann den generierten HTML-Code über die CGI-Schnittstelle zur Verfügung stellt.
Die Erstellung dieser Eingangsseite möchte ich hier exemplarisch erklären. Die Seite setzt sich aus drei Komponenten zusammen, der HTML-Komponente, der Deklarations-Komponenete und der Objective-C-Komponente[27 ].
Die HTML-Komponente bildet unter Einbindung der WebObjects-Marken, die als Platzhalter der WebObjekts-Module fungieren, den statischen Anteil der WebObjects-Komponente.
Abb. 43 : HTML-Komponente des WebObjects-Modules (Main.html)
In der <WEBOBJECT>-Marke wird der Name des korrespondierenden WebObjetcs-Objekts, das in der Deklarationsdatei entsprechend gemaped ist, bekannt gegeben und kann beim Laden der HTML-Seite angefordert werden. In der oben abgebildete HTML-Seite sind drei WebObjetcs-Objekte eingefügt worden:
* TopBar: Eine WebObjects-Objekt zur Darstellung eines Images, das in der Eingangsseite die Kopfzeile ausfüllt.
* Image1: Mit diesem Objekt wird ebenfalls die Darstellung eins Images bewirkt. In diesem Fall wird das Firmen-Logo der Firma MIT-H dargestellt.
* NavigatorBar: Dieses WebObjects-Objekt stellt ein Auswahlmenü in Form einer Aktive-Image-Lösung dar und ermöglicht bei einem Klick auf einen entsprechenden Sektor das Wechseln zu einer bestimmten Seite.
Das WebObjects-Objekt, das hinter dieser Bezeichnung mit der zuvor genannten Funktionalität steckt, wird in der Deklarationsdatei beschrieben und auf dem binären Programmteil später abgebildet.
Die zweite Komponente ist dann die Deklarationsdatei, in der die Schnittstelle zwischen statischem und dynamischem Anteil der WebObjekts-Applikation deklariert wird und die WebObjekts-Objekte entsprechend ihrer gewünschten Funktionalität parametrisiert werden.
Abb. 44: Deklaratiosdatei des WebObjects-Modules (Main.wod).
In der oben abgebildeten Deklarationsdatei wird nun den Namen, die die einzelnen Objekte in der HTML-Datei bezeichnen, WebObjects-Objekte zugewiesen und die Parametern mit den Werten initialisiert. So wird beim WOImage-Objekt z.B. nur der Parameter src mit dem Pfad der Grafikdatei, die vom WOImage-Objekt dargestellt werden soll, initialisiert.
Das WOActiveImage-Objekt hat im Vergleich eine etwas kompliziertere Initialisierung. Die im folgenden der Reihenfolge nach erklärt werden:
* action: Mit dem Parameter action wird die Default Methode angegeben, die ausgeführt wird, wenn die Koordinaten, die dem Mausklick entsprechen, keine Methodenzuordnung besitzen.
* imageMapFile : Dieser Parameter ist eine Pfadangabe auf eine ASCII-Datei, die in einer vorgeschriebenen Konvention editiert und die Image-Bereiche einer entsprechenden Methoden der Klassen zuordnet. Eine Beschreibung dieser Datei findet im folgenden statt.
* src : Dieser Parameter beinhaltet den Pfad des Hintergrund-Images (siehe WOImage).
* x,y : Werden mit Verweisen auf Speicherplätze (Instanzvariablen der Objective-C Klasse) initialisiert. Diese enthalten die Koordinaten des Imagebereiches, in dem ein Mausklick stattgefunden hat.
Beispiel für einen imageMapFile, der eine Zuordnung von Koordinatenbereichen zu Methoden vornimmt:
Abb. 45: imageMapFile
Der "imagMapfile", der bei der Initialisierung eines WOActiveImages geladen wird, trifft eine Zuordnung von Koordinatenbereichen zu den entsprechenden Methoden. Eingeleitet wird jede Zuordnung mit der Marke rect, auf die nach einem Leerzeichen der Methodenname folgt und danach, ebenfalls durch Leerzeichen getrennt, erfolgt die Angabe des oberen und unteren Eckpunktes des Imagebereiches, der für den Aufruf der zuvor angegebenen Methode verantwortlich ist. Trifft keine Zuordnung für die Mausklick-Koordinate zu, so wird die Methode, die mit dem Parameter "action" bekanntgegeben wurde, aufgerufen.
Die Dritte Komponente, die das nähere Verhalten der WebObjects-Komponenete beschreibt, wird durch eine Deklaration einer Klasse und deren Implementierung in Objective-C formuliert.
Abb. 46 : Deklarartiondatei in der Klasse Main (Main.h).
Die Klasse Main erbt von der Klasse WOComponent, die die Grundfunktionalität einer WebObjekcts-Komponente bereitstellt. Die Deklaration der Klasse WOComponent wird mit <WebObjects/WebObjects.h> importiert. Diese beinhaltet das Eingliedern in die WebObjects-Applikation und das Management des Lebenszyklusses, wie Speicherzuweisung und Lebensdauer. Des weiteren wird durch WOComponent die Kommunikation gemanagt. Die Klasse Main ist letztendlich die logische Formulierung der WebObjects-Komponente, die dann zur Anzeige einer dynamischen HTML-Seite mit deren spezifischen Verhalten auf dem Browser führt[28].
Die Instanzen der Klassen Main haben die folgenden Aufgaben:
* nameString: nameString ist eine temporäre Variable vom Type NSString* zur Aufnahme von String-Objekten, die zur weiteren Verarbeitung oder Paramerterübergabe benötigt werden.
* xValue: Die Variable xValue vom Type NSNumber* ist eine Referenz auf ein Objekt gleichen Typs, das die x-Koordinate des momentanen Mausklicks im zuvor beschriebenen WOActiveImage enthält.
* yValue: Die Variable yValue vom Type NSNumber* ist eine Referenz auf ein Objekt gleichen Typs, das die y-Koordinate des momentanen Mausklicks im zuvor beschriebenen WOActiveImage enthält.
Beschreibung der Methoden der Klasse Main:
* datenpflege: Die Methode datenpflege ruft den entsprechenden Dialog zur Datenpflege auf und bringt die entsprechende Komponente zur Anzeige. Die Methode wird durch einen Eintrag im ImageMapFile erkannt und durch einen Mausklick auf das WOAktiveImage zur Ausführung gebracht. Das Gleiche gilt für Methoden der Koponenten berichte und navigator.
* defaultAction: Die Methode defaultAction ruft den entsprechenden Dialog zur Datenpflege auf und bringt die entsprechende Komponente zur Anzeige. Die Methode wird bei der Initialisierung des action-Parameters bekanntgegeben und nur dann ausgeführt, wenn kein Bereich im ImageMapFile zutreffend ist.
* dealloc: Diese Methode wurde überlagert und ist für die Freigabe der Objektresourcen zuständig.
Die Implementierung der Klasse Main sieht wie folgt aus:
Abb. 47: Implementierung der Klasse Main.
Die Implementierung der Klasse Main soll anhand der Methoden dealloc, navigator und defaultAction besprochen werden.
* dealloc: Als erstes wird in der Methode eine Message an das Objekt nameString gesendet, die eine Freigabe der für die alokierten Objektresourcen initiiert. Die Message "[super dealloc]" löst die Ausführung der überlagerten Deallokationsmethoden aus.
* defaultAction: Gibt ein self zurück, was eine Neuzeichnung des Dialogs, aber keinen Wechsel zu einem neuen Dialog, auslöst.
* navigator: In dieser Methode wird eine lokale Referenz auf ein Objekt vom Type Navigator mit der Bezeichnung nextPage deklariert. Der Type Navigator ist die Klassen-Repräsentation der Komponente Navigator. Die Bildung der neuen Komponente wird durch eine Nachricht an das WebObjects-Applikationsobjekt, dessen Adresse mit der Nachricht [self application] erfragt wird, und mit der Nachricht "pageWithName:@"Navigator" ausgelöst. Die Referenz auf die Komponente wird dann zurückgegeben und verursacht einen Seitenwechsel auf dem Browser.
Die hier zuvor beschriebenen Mechanismen sind grundlegend für die Erstellung einer WebObjects-Applikation. Die folgenden Dialoge arbeiten auf die gleiche Art und Weise und bieten durch die Binärform ein Höchstmaß an Performanz.
Eine sensitive Fläche, die in Koordinatenfelder aufgeteilt ist und bei einem Klick in das entsprechende Feld eine Aktion ausführt.
[27] Eine allgemeine Erklärung zum Aufbau einer WebObjects-Applikation ist im Kapitel 3.8.6: "Das WebObjects-Framework" zu finden. Ein "Hello World-Beispiel" befindet sich im Anhang 2.
[28] Die Erläuterung zur Syntax von Objective-C ist im Anhang 1 zu finden.