Inhalt Abbildung PDF Source SCWCD
 |<    <     >    >|  Generated by CoCoDiL

12.4 Aufbau von Simple Classic Tag Libraries

Describe the semantics of the "Simple" custom tag event model when the event method (doTag) is executed; write a tag handler class; and explain the constraints on the JSP content within the tag.

12.4.1 Vergleich mit den klassischen Tag Interfaces

Das SimpleTag Interface ist seit JSP 2.0 eingeführt, und vereinfacht die Programmierung von eigengeschreibenen Tags.

Es hat folgende Vorteile:

Es hat auch ein paar Nachteile:

12.4.2 Das SimpleTag Interface

Der Programmierer schreibt Klassen, die das SimpleTag Interface erfüllen. Meist entwickelt er eine Unterklasse der abstrakten Klasse SimpleTagSupport. Diese Unterklasse überschreibt dann meistens nur die doTag() Methode.


Abb. 12.7: Benutzung SimpleTagSupport Klasse

Während bei den Classic Custom Tags es verschiedene Arten von Events gibt (doStartTag(), doEndTag() und doAfterBody() wird bei dieser Version nur der doTag() bei der Bearbeitung des Bodys ausgelöst.


Abb. 12.8: Events bei Bearbeitung mit SimpleTag

I.a. wird der Programmierer eine Unterklasse von SimpleTagSupport schreiben. In dieser Unterklasse schreibt er für jedes übergebene Attribut eine entsprechende setter-Methode und überschreibt die doTag() Methode.

Die Klasse SimpleTagSupport bietet einige Methoden, die die Implementierung des Tags erleichtern.

Dies ist i.a. die einzigste Methode die der Programmierer überschreibt, und wird beim Lesen des Bodys des Tags aufgerufen. Mit dem Werfen einer SkipPageException wird veranlasst dass der Rest der JSP Seite nicht weiter bearbeitet wird (entspricht TAG.SKIP_BODY Konstante, bei den Classic Custom Tag Interfaces).

Dies gibt den TagHandler des übergeordneten Tags zurück. JspTag ist das Interface das alle TagHandler erfüllen, hat aber keine eigenen Methoden. D.h der Programmierer muss nach Anwendung der getParent() Methode das erhaltene Objekt auf die konkrete TagHandler Klasse casten. Hat der Tag keinen übergeordneten Tag, so wird null zurückgegeben

Diese Methode wird meistens nur vom Container verwendet.

Findet den nächsten Vater des Tags from, der der Klasse klass entspricht. Intern wird die getParent() Methode verwendet.

Enthält den Body des Tags in Form eines JspFragment Tags. Die Verwendung wird weiter unten erklärt

Diese Methode wird meistens nur vom Container verwendet.

Dies ist eine abstrakte Klasse. Die Klasse PageContext ist i.a. die einzigste konkrete Unterklasse von JspContext. JspContext dient zum Zugriff auf die Attribute der Scopes, und mit getOut() erhält man die aktuelle Ausgabe. Diese Methode wird sehr häufig angewendet.

Diese Methode wird vom Container verwendet, und selten vom Programmierer direkt benutzt.

12.4.3 Beispiel für die Verwendung eines SimpleTag Interfaces

Es wird bewusst ein Beispiel mit einem Tag ohne Body genommen. Der Tag hat folgenden Aufbau

Es wird ausgegeben:

Der TagHandler wird folgendermassen programmiert

12.4.4 Zugriff auf den Body des Tags

Ein TagHandler der das SimpleTag Interface erfüllt, getJspBody() und sollte ein JspFragment Objekt zurückgeben. Das JspFragment kapselt den Body und hat nur 2 Methoden.

Die Methode invoke(Writer) schreibt die Auswertung des Body in das Argument Writer. Ist der Wert des Arguments null so wo wird der Body, in den Writer, der sich durch getJspContext().getOUt() ergibt, ausgegeben. In diesem Fall wird der Body in die normale Ausgabe geleitet. Immer dann wenn den Body selbst nicht bearbeiten will, übergibt man den null Wert als Argument der invoke() Methode.

Immer dann wenn man den Body bearbeiten will, kann man ein eigenes Writer Objekt erzeugen, und darin die Ausgabe puffern, und dann in die Ausgabe zurückgeben.

12.4.5 Schleifen mit dem SimpleTag Interface

Schleifen werden intern in der doTag() Methode implementiert. Ein einfaches Beispiel verdeutlicht dies.

Der entsprechende TagHandler kann folgendermassen implementiert werden:

Beachte:

Inhalt Abbildung PDF Source SCWCD
 |<    <     >    >|  Generated by CoCoDiL