Get your wingS back!

wingS Komponenten im Selbstbau

Das einfache Beispiel einer eigenen Minimalkomponente soll im Folgenden die einfache Erweiterbarkeit aber auch die innere Funktionsweise von wingS etwas veranschaulichen. Wie bereits erläutert nimmt selbst diese Minimalkomponente bereits automatisch an der inkrementellen Aktualisierung teil. Die Mittel hierzu sowie ihre Eigenschaft als wingS-Komponente erbt sie über die gemeinsame Basisklasse SComponent. Wichtig ist nur, dass sie den ReloadManager über alle Aktualisierungen in ihrer Darstellung informiert. Im folgenden Fall erledigt das der Aufruf der Methode reloadIfChange.

public class MyComponent extends SComponent {
   private String payload;
   public MyComponent() {
         setCG(new MyComponentCG());
    }
    public void setValue(String v) {
         reloadIfChange(v, payload);
         this.payload = v;
    }
    public String getValue() {
         return payload;
    }
}

Unsere Komponente benötigt noch einen passenden Renderer, der sich um die Generierung der HTML-Darstellung kümmert. Hierbei sollten auch alle bereits in der Basisklasse SComponent deklarierten Eigenschaften wie Größe, Ausrichtung und Farbe mit berücksichtigt werden, was wir uns aber aufgrund unseres einfachen Beispiels ersparen.

public class MyComponentCG 
       extends AbstractComponentCG {
 public void writeInternal(Device d,
        SComponent c) throws IOException {
     MyComponent mc = (MyComponent) c;
     d.print("").print(mc.getValue());
     d.print("");
  }
}

In der gezeigten Variante ist unsere Komponente ein reines Textlabel. Soll die Komponente aktiv werden, d.h. Eingaben vom Client verarbeiten können, muss sie noch die Schnittstelle LowLevelEventListener implementieren, um vom Dispatcher die an ihre ID gerichteten Request-Parameter erhalten zu können. Noch mehr Möglichkeiten bei der Komponentenentwicklung kann man sich auf einfache Weise, z.B. durch die Verwendung der bereits mit wingS enthaltenen Yahoo UI Library oder weiterer Ajax-Bibliotheken, erschließen.

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.