WebTML-Formulare ist ein Funktionalitätsblock von WebTML um Eingabeformulare in WebTML-Seiten zu integrieren, und die damit verarbeiteten Daten mit WGA-Datenbanken zu verbinden.
Die Strategie der Definition von WebTML-Formularen entspricht weitestgehend der von HTML-Formularen, zu welchen sie auf der Browser-Seite auch konvertiert werden. Ebenso wie bei HTML wird über einen speziellen Tag, hier <tml:
form>, eine Formular-Definition direkt in der WebTML-Seite gestartet. Deren Inhalt wird dann über einen weiteren Tag, hier <tml:
input>, mit Eingabefeldern ausgestattet.
<tml:form id="theform">
Name: <tml:input name="surname" type="text"/>
Vorname: <tml:input name="firstname" type="text"/>
</tml:form>
Bei <tml:form> ist das Attribut id, ansonsten optional, ein Pflicht-Attribut.
WebTML-Formulare unterscheiden sich von reinen HTML-Formularen im Wesentlichen durch folgende Eigenschaften:
- Die Speicherung der Daten von WebTML-Formularen erfolgt nicht automatisch bei ihrer Übermittlung. Stattdessen kann der Designer über WebTML-Actions beliebige Funktionalitäten definieren die auf das Formular angewendet werden können, darunter auch die Speicherung in eine Datenbank
- WebTML-Formulare besitzen eine automatische Datenbindungs-Funktion bei welcher die Felder entweder aus einem Inhaltsdokument oder aus dem Benutzerprofil des Benutzers gefüllt werden, bzw. die Daten in diese Dokumente wieder zurückgespeichert werden können
- WebTML-Formulare können "persistent" sein, d.h. ihre Daten werden serverseitig zwischengespeichert und sind nicht verloren, wenn der Benutzer die Seite mit dem Formular verlässt. Das persistente Formular kann anhand seiner ID wieder hervorgeholt und weiterverwendet werden
- WebTML-Formulare sind gegen boswillige Änderungen des Formularcodes durch den Client geschützt. WGA ignoriert Felder die clientseitig hinzugefügt wurden.
Die Eingabefelder von WebTML-Formularen, definierbar über
<tml:
input>, haben ebenso wie
HTML-Eingabefelder einen Namen (Attribut
name) und einen Typen (Attribut type in Variationen, siehe <tml:
input>). Der Typ bestimmt sowohl
den Datentypen der Eingabe als auch die Darstellungsform, z.B. als
Checkboxen, Auswahlfeld etc.
Anders als bei HTML werden bei
Checkbox- und Radiobutton-Gruppen nicht die einzelnen Checkboxen bzw. Radio-Buttons definiert sondern die gesamte Gruppe gemeinsam, was in der Regel die Definition vereinfacht. Diese Gruppen werden WGA-intern als einzelne Felder betrachtet, die im Fall von Checkboxen Mehrfach-Werte annehmen können.
Die Einzelwerte die als Checkboxen oder Radio-Buttons ausgegeben werden sind über das Attribut
options bzw.
optionsitem zu definieren.
<tml:input name="choices" type="checkbox" options="Red, Blue, Green"/>
Fur jedes Eingabefeld gibt es drei
Darstellungsmodi die über das Attribut
mode gesteuert werden. Der normale Modus "edit" entspricht einem normal verwendbaren Eingabefeld. Der Modus "readonly" stellt das Eingabefeld deaktiviert dar. Der Modus "view" zeigt lediglich den Wert des Eingabefeldes an. Dieser Modus kann auch global für das gesamte Formular über das Attribut
mode von <tml:form> eingestellt werden.
WebTML-Formulare ermöglichen auf einem sehr einfachen Weg die Bindung an Daten aus einem Inhaltsdokument, dem Benutzerprofil des aktuellen Benutzers oder der Konfiguration des aktuellen WebTML-Portlets.
Schlüssel zu dieser Funktionalität ist das Attribut
source am Tag <tml:form>. Hier kann angegeben werden zu welchem Dokument eine Bindung aufgebaut werden soll. Beispielsweise baut source="content" eine Bindung zum aktuell im Kontext des <tml:form>-Tags befindlichen Inhaltsdokument auf.
Nun muss der WebTML-Designer nur noch das Formular mit Input-Feldern füllen, welche dieselben Namen haben wie die Items im Inhaltsdokument, Benutzerprofil oder Portlet-Konfiguration. Hat ein Input-Feld denselben Namen wie ein Item des gebundenen Dokumentes so wird der Inhalt des Items automatisch in das Formular-Feld hineinkopiert.
Dies geschieht grundsätzlich bei der
ersten Darstellung des Eingabefeldes. Danach ist das Formularfeld zunächst unabhängig vom Item. Es kann seinen Wert ändern ohne dass das Item sich ändert. Umgekehrt kann das Item seinen Wert ändern ohne dass das Formularfeld seinen Wert ändert. Das Formular hat somit den Status einer "Speicherkopie" des gebundenen Dokumentes die nun bearbeitet und wieder in das Dokument zurückgespeichert werden kann.
Zur Verarbeitung von WebTML-Formularen werden WebTML-Actions eingesetzt. Es gibt einige Default-Actions die häufig benötigte Funktionalitäten vordefinieren wie "$store", "$attach" oder "$reset" (siehe
WebTML-Default-Aktionen), aber meistens wird man darauf nicht verzichten wollen, seine WebTML-Actions in Form von TMLScript genauer zu definieren.
Zur serverseitigen Repräsentation des WebTML-Formulars existiert das Objekt
TMLForm. Es beinhaltet alle aktuell im Formular eingegebenen Daten und kann benutzt werden um die Daten zu modifizieren und sie gegebenfalls zu speichern:
<a href="<tml:url type="action">tmlform.storeInContent();<tml:url>">Speichern</a>
Das Objekt ermöglicht auch die Definition von
versteckten Feldern. Anders als bei HTML-Formularen genügt es in WebTML dieses Feld serverseitig am TMLForm-Objekt zu definieren und es dann nicht zur Anzeige zu bringen indem man einfach kein gleichbenamtes <tml:input> ausgibt.
Der Wert des Feldes wird trotzdem konserviert da er in unsichtbaren und verschlüsselten Metadaten des Dokumentes mittransportiert wird. Dies ist sicherer als ein verstecktes Feld über den HTML-Typen "hidden" da es so nicht vom Benutzer modifiziert werden kann.