TML-Actions sind dafür entwickelt worden, um interaktive Komponenten in eine WebSite oder ein Unternehmensportal einzubinden.
Mit Hilfe von TML-Action können Action-Links erzeugt werden. Beim Klick auf einen solchen Link wird ein im Design hinterlegtes TMLScript ausgeführt. Entscheidend ist dabei, daß das Script auf dem Server ausgeführt wird und dies, bevor das HTML (bzw. das Ausgabeformat) der Seite erzeugt wird.
TML-Actions werden in TMLScript programmiert.
Um eine Link-Action in ein Design einzubinden, wird der <tml:url> Tag mit dem zusätzlichen Attribut type="action" verwendet.
Es gibt zwei Möglichkeiten, die auszuführende TMLScript-Action anzugeben:
TMLScript-Action innerhalb des <tml:url>-Tags.
Die einfachste Möglichkeit zur Definition von TMLScript-Actions ist die Angabe des Scripts innerhalb des Bodys des <tml:url>-Tags:
- <tml:url type="action">... TMLScript ...</tml:url>
- <a href="<tml:url type="action">
- this.setSessionVar("test", "Hier wurde geklickt");
Auf dieser Seite kann nun die Variable abgefragt und entsprechend reagiert werden.
Ausführlicheres Beispiel:
- <h1>Beispiel</h1>
<tml:if condition="this.details =='True'">
- <tml:then>
- Anzeige von irgendwelchen Details
<tml:else>
- <a href="<tml:url type="action">
- this.setSessionVar("details", "True");
TMLScript-Actions über separaten <tml:action>-Block aufrufen.
Bei umfangreichen Scripts oder bei Scripts, die an verschiedenen Stellen einer Seite aufgerufen werden sollen, kann das Script als separte Action-Definition angegeben werden. Dazu dient der Tag <tml:action>:
- <tml:action id="details">
- this.setSessionVar("details", "True");
...
<a href="<tml:url type="action" action="details"/>">Hier klicken</a>
<tml:action> mit Parametern
Häufig ist es notwendig, der auszuführenden Action einen oder mehrere Parameter zu übergeben. Dazu können die Parameter über die Attribute param1 bis param4 innerhalb der <tml:url>-Tags übergeben werden (es können maximal 4 Parameter übergeben werden):
- <a href="<tml:url type="action" action="details" param1="teilweise"/>">Hier klicken</a>
<a href="<tml:url type="action" action="details" param1="vollständig"/>">Hier klicken</a>
- <tml:action id="details">
- this.setSessionVar("details", this.tmlparam1);
<tml:select>
- <tml:case condition=""this.details=='teilweise'"
- zeige Teile der Informationen an
<tml:case condition=""this.details=='vollständig'"
- zeige alle Informationen an.
Verwendung von TML-Actions in Formularen
Besonders sinnvoll sind TML-Actions innerhalb von Formularen in Zusammenarbeit mit dem <tml:form>-Tag:
- <tml:form id="myform" source="profile">
- Name: <tml:input name="name"/><br>
E-Mail: <tml:input name="mail"/><br>
<a href="<tml:url type="action">this.tmlform.storeInProfile()</tml:url>">speichern</a>
Der "Context" innerhalb von TML-Actions
Es ist wichtig zu beachten, daß TML-Actions vor dem Rendern der Seite ausgeführt werden.
WGA sorgt dabei dafür, daß das Action-Script stets innerhalb des passenden Contexts ausgeführt wird. Das this-Objekt zeigt immer auf den Context, in dem die Action referenziert wurde, also der Context des <tml:url>-Tags der Action.
Ebenso stehen die Objekte this.portlet und this.profile innerhalb von TML-Actions zur Verfügung.
Zu Beachten ist aber, daß temporär gesetzte Content-Variablen in den Actions nicht bekannt sind. Folgendes Beispiel für zu einem Fehler:
- <tml:eval var="test">return "Dies ist eine temporäre Varibale"</tml:eval>
<a href="<tml:url type="action">this.profile.setItem("test", this.test);this.profile.save()</tml:url>">speichern</a>
Zur Lösung der Aufgabe kann jedoch eine TML-Action mit Parametern verwendet werden:
- <tml:action id="save">
- this.profile.setItem("test", this.tmlparam1);
this.profile.save()
...
<tml:eval var="test">return "Dies ist eine temporäre Varibale"</tml:eval>
<a href="<tml:url type="action" param1="{this.test}"/>">speichern</a>