Die "Switch"-Variante von tml:select
Mit dem Tag <tml:select> können eine Reihe von Konditionen getestet werden, von denen (in der Regel) nur der erste "Treffer" zu einer Aktion führen soll. Einzelne Konditionen und ihre zugehörigen Aktionen werden in <tml:case>-Tags definiert:
Wer <tml:case> nur ohne <tml:select> kennt wird sich hier vielleicht wundern was der Unterschied ist. Das umliegende <tml:select> sorgt dafür dass:
Für diese Fälle der Verwendung von <tml:select> gibt es seit WGA 4.1eine syntaktische Vereinfachung: Das Attribut "switch":
<tml:select>
<tml:case condition="val == 1">
...
</tml:case>
<tml:case condition="val == 2">
...
</tml:case>
<tml:caseelse>
...
</tml:caseelse>
</tml:select>
<tml:case condition="val == 1">
...
</tml:case>
<tml:case condition="val == 2">
...
</tml:case>
<tml:caseelse>
...
</tml:caseelse>
</tml:select>
Wer <tml:case> nur ohne <tml:select> kennt wird sich hier vielleicht wundern was der Unterschied ist. Das umliegende <tml:select> sorgt dafür dass:
- Nur der erste <tml:case> ausgeführt wird dessen Kondition erfüllt ist. Weitere <tml:case>-Tags werden nicht angerührt, egal ob ihre Kondition erfüllt wäre oder nicht (es sei denn dies sei durch Attribut testall="true" explizit erwünscht)
- Der optionale Tag <tml:caseelse> ausgeführt wird falls keine Kondition zuvor erfüllt war.
Für diese Fälle der Verwendung von <tml:select> gibt es seit WGA 4.1eine syntaktische Vereinfachung: Das Attribut "switch":
Dessen Verwendung sieht folgendermaßen aus:
Dieser Code besitzt dasselbe Verhalten wie jener aus Beispiel 1. Nur dass der zu vergleichende Wert im Attribut "switch" angegeben wird, welches zum <tml:select>-Tag gehört. Das Attribut erwartet einen beliebigen TMLScript-Ausdruck dessen Ergebnis den Vergleichswert ergibt. In diesem Fall wird einfach die WebTML-Variable "val" abgerufen deren Wert verglichen wird.
In den Tags <tml:case> wird nun statt des Attributes "condition" das neue Attribut "value" verwendet. Dieses empfängt den zweiten Wert mit welchem jener aus dem "switch"-Ausdruck verglichen werden soll. Jenes <tml:case> dessen "value" mit dem "switch"-Wert übereinstimmt erhält den "Zuschlag". Weitere <tml:case>-Tags werden wie üblich ignoriert.
<tml:select switch="val">
<tml:case value="1">
...
</tml:case>
<tml:case value="2">
...
</tml:case>
<tml:caseelse>
...
</tml:caseelse>
</tml:select>
<tml:case value="1">
...
</tml:case>
<tml:case value="2">
...
</tml:case>
<tml:caseelse>
...
</tml:caseelse>
</tml:select>
Dieser Code besitzt dasselbe Verhalten wie jener aus Beispiel 1. Nur dass der zu vergleichende Wert im Attribut "switch" angegeben wird, welches zum <tml:select>-Tag gehört. Das Attribut erwartet einen beliebigen TMLScript-Ausdruck dessen Ergebnis den Vergleichswert ergibt. In diesem Fall wird einfach die WebTML-Variable "val" abgerufen deren Wert verglichen wird.
In den Tags <tml:case> wird nun statt des Attributes "condition" das neue Attribut "value" verwendet. Dieses empfängt den zweiten Wert mit welchem jener aus dem "switch"-Ausdruck verglichen werden soll. Jenes <tml:case> dessen "value" mit dem "switch"-Wert übereinstimmt erhält den "Zuschlag". Weitere <tml:case>-Tags werden wie üblich ignoriert.
Weiter zur nächsten Seite ...