Custom-Tags
Der IES bietet die Möglichkeit neben Templates auch eigene Tags, sog. Custom-Tags, innerhalb eines Mandanten zu erstellen und zu verwenden.
Als Custom-Tags bezeichnet man hierbei Templates eines besonderen Typs, die über InfoSite erstellt und bearbeitet werden. Dabei wird für jeden Mandanten ein eigener Tag-Prefix (analog zu spt
) definiert. Die Verwendung solcher Tags unterscheidet sich danach nicht mehr von den SPT-Tags.
<mytaglib:output name="sp_headline" type="html"/>
Bei der Erstellung des Custom-Tags muss folgende Syntax für den Namen eingehalten werden:
- Tag-Prefix : Name des Tags
Weiterhin muss der entsprechende Template-Typ Tag-Template ausgewählt werden.
Den Tag-Prefix für die Custom-Tags eines Mandanten können Sie in der Systemadministration festlegen. Bitte beachten Sie, dass jeder Tag-Prefix pro Installation nur einmal verwendet werden darf, da es sonst zwischen unterschiedlichen Mandanten zu Problemen führen kann.
Hinweis: Sowohl für den Tag-Prefix, als auch für den Namen des Tags gelten die Regeln für die Vergabe von Variablennamen.
Zur Erstellung der Custom-Tags bietet der IES zwei Tags:
- Tag zur Evaluierung der Variablennamen innerhalb des aktuellen Elementes
- Tag zur Ausgabe des Inhaltes zwischen öffnenden und schließenden Custom-Tag
Definition der Attribute
Da es sich bei den Custom-Tags genau wie bei allen Templates auch um JSP-Seiten handelt, sind hier besondere Regeln einzuhalten. Alle Attribute des Tags müssen in den ersten Zeilen in entsprechender JSP-Syntax definiert werden. Erst danach sind Kommentare (<%-- --%>
) oder andere SP-Tags erlaubt. Für jedes Attribut wird eine eigene Anweisung mit folgender Syntax angegeben:
<%@ attribute name="" required="true|false" rtexprvalue="true|false" %>
Dabei haben die Attribute folgende Bedeutung:
Attribut | Bedeutung |
name | Name des Attributes, welches Sie bereitstellen möchten |
required | Ist die Angabe dieses Attributes verpflichtend |
rtexprvalue | Soll das Attribute über die JSP-EL evaluiert werden (hier ist "false" anzugeben) |
Dynamische Attribute
Es besteht neben der Definition von benannten Attributen auch noch die Möglichkeit beliebige, dynamische Attribute zu unterstützen. Dies ist z.B. bei der Erstellung von HTML-Ausgabe-Tags interessant, da so auch HTML-Attribute an den Tag übergeben werden können, auch wenn diese funktional keine Bedeutung haben. Um dynamische Attribute im Tag zuzulassen, ist nach den Page-Direktiven für die Attribut-Definitionen folgender Tag notwendig:
<%@ tag dynamic-attributes="dynamics" %>
Dabei wird eine HashMap mit allen Attribute und den entsprechenden Werten erstellt und steht unter dem Variablennamen dynamics
im Template zur Verfügung.
Sollen diese Attribute auch noch evaluiert werden, so kann folgender Code eingefügt werden:
<sp:attribute dynamics="dynamics"/>
Sollen die Attribute teilweise oder vollständig im Template verarbeitet werden, so kann die Map entweder in einer Schleife verarbeitet oder direkt ausgewertet werden.
Ausgabe einzelner, dynamischer Attribute
<div style="<sp:print name="dynamics.style" encoding="html"/>"></div>
Auswertung aller dynamischen Attribute bis auf size
<sp:set name="_dynamics" value=""/>
<sp:loop collection="dynamics.entries" item="dyn">
<sp:condition>
<sp:if name="dyn.key.toLowerCase" eq="size"/>
<sp:elseif name="dyn.key" isNull="false">
<sp:set name="_dynamics"><sp:print text="${_dynamics} ${dyn.key}="/>"<sp:print name="dyn.value" encoding="html"/>"</sp:set>
</sp:elseif>
</sp:condition>
</sp:loop>
<div size="10"<sp:print name="_dynamics"/>></div>
Werden die Attribute an SP-Tags übergeben, so geschieht dies über das Attribut dynamics
. Dabei dürfen die Attribute nicht vorher evaliert werden, da alle SP-Tags dies automatisch vornehmen.
Beispiele
Dieser Custom-Tag (mytaglib:border) soll je nach Typ-Angabe einen Rahmen um einen Text mit optionaler Überschrift zeichnen.
Quelltext des Tag-Templates
<%@ attribute name="type" required="true" rtexprvalue="false" %>
<%@ attribute name="title" required="false" rtexprvalue="false" %>
<sp:attribute name="title"/>
<sp:condition>
<sp:if condition="${type} == 'info'">
<fieldset><legend><sp:print name="title" default="INFO"/></legend>
<center><sp:tagbody/></center>
</fieldset>
</sp:if>
<sp:elseif condition="${type} == 'error'">
<fieldset><legend><sp:print name="title" default="Fehler"/></legend>
<center><sp:tagbody/></center>
</fieldset>
</sp:elseif>
<sp:else>
<span style="border-width:1px; border-style:solid;">
<sp:tagbody/>
</span>
</sp:else>
</sp:condition>
Quelltext des Templates in dem mytaglib:border verwendet wird
<mytaglib:border type="info" title="${sp_headline}">
Eine kleine Infobox!
</mytaglib:border>
<mytaglib:border type="error">
Ein Fehler ist aufgetreten!
</mytaglib:border>
<mytaglib:border type="none">
Normaler Rahmen
</mytaglib:border>
Ausgabe
<fieldset><legend>Eine Überschrift</legend>
<center>Eine kleine Infobox!</center>
</fieldset>
<fieldset><legend>Fehler</legend>
<center>Ein Fehler ist aufgetreten!</center>
</fieldset>
<span style="border-width:1px; border-style:solid;">
Normaler Rahmen
</span>