Die Common-Controls Tag Bibliothek

<ctrl:tabset>

Erzeugt ein Tabset Kontrollelement (Karteikarten). Die einzelnen Taben (Reiter) des Kontrollelementes können mit Hilfe des <tab>-Tags direkt in der JSP-Seite angegeben werden.
../images/images/tabset_small.gif

Body content: JSP
Tag class: TabsetTag
Tei class: TabsetTei
 

[ Syntax ]

Standard Syntax
<ctrl:tabset
[ action = "String" ]
[ ajax = "Boolean" ]
[ bgcolor = "String" ]
[ border = "Integer" ]
[ disabled = "Boolean" ]
[ filter = "boolean" ]
[ formElement = "Boolean" ]
[ height = "String" ]
[ id = "String" ]
[ imagemap = "String" ]
[ labellength = "Integer" ]
[ locale = "String" ]
[ name = "String" ]
[ overlapping = "boolean" ]
[ permission = "ACL" ]
[ property = "String" ]
[ runat = "{server | client | auto}" ]
[ scope = "{any | page | request | session | application}" ]
[ shadow = "Boolean" ]
[ stacked = "Boolean" ]
[ style = "String" ]
[ styleClass = "String" ]
[ styleId = "String" ]
[ summary = "String" ]
[ tabindex = "Integer" ]
[ tabs = "Integer" ]
[ transaction = "Boolean" ]
[ value = "String" ]
[ width = "String" ]
>
...Body Content...

</ctrl:tabset>
 

[ Attribute ]

AttributTypBeschreibungPflichtRTExp
actionString Gibt die Struts Action an, welche bei Kontrollelement Ereignissen aufgerufen werden soll.

Dieses Attribut muss nicht angegeben werden, wenn das Tag von einem Struts <html:form> Tag umschlossen ist. in diesem Fall wird der Name der Action über die Struts Formular Bean ermittelt.

Anmerkung: Die Action muss in einer der struts-config.xml Dateien deklariert sein.

 
ajaxBoolean Aktiviert die AJAX Funktion des Kontrollelementes. Alle Kontrollelement Ereignisse werden dann mit JavaScript asynchron an den Server gesendet und dort verarbeitet.

Die Verarbeitung auf dem Server unterscheidet sich nicht von einer normalen Request Behandlung. Der Anwendungsentwickler hat jedoch die Möglichkeit über die Methoden des AjaxRequest Interfaces (Basisklasse von ActionContext) die Ergebnis Rückmeldung zu steuern.

Im Normalfall (-> AjaxRequest.isAjaxCanceled() == false) wird ein Delta XML Stream zum Web Browser zurückgeschickt. Dieser Stream enthält nur die schmutzigen Kontrollelemente, welche dann mit Hilfe eines JavaScript Handlers vom Web Browser im HTML DOM Tree selektiv ausgetauscht werden. Es wird also keine vollständige HTML Seite vom Server übertragen!

  • (+) Die übertragene Datenmenge ist kleiner.
  • (+) Die HTML Seite bleibt im Browser stehen und es gibt kein "flackern".
  • (-) Der Request wird nicht in der Browser Historie vermerkt!
  • (-) Es wird JavaScript benötigt, sonst wird ein normaler Server roundtrip ausgelößt

Die meisten Kontrollelemente fügen sich selbst in die Dirty Liste des ActionContext ein. Hierzu wird einfach die Methode AjaxRequest.markDirty() aufgerufen. Der Anwendungsentwickler hat damit die Möglichkeit noch weitere Kontrollelemente - die durch eine Zustandsänderung ebenfalls schmutzig geworden sind - in den Delta Stream aufzunehmen

Wenn der Request eine vollständig neue HTML Seite zurückgeben soll, dann besteht auch die Möglichkeit die AJAX Verarbeitung auf dem Server abzubrechen. Hierzu wird die Methode AjaxRequest.cancelAjaxRequest() aufgerufen. Das Framework sendet danach immer eine vollständige HTML Seite zurück an den Web Browser.

Das Common-Controls AJAX XML Protokoll hat das folgende Format:


<?xml version="1.0" encoding="UTF-8" ?>
<ajax-response>
	<token/>
	<controls>
		<control styleId="" class="" name="">
			<html>
				<[CDATA[...]] >
			</html>
		</control>
	</controls>
</ajax-response>

				
 
bgcolorString Setzt die Hintergrundfarbe für das Kontrollelement. Dies ist besonders dann wichtig, wenn mehrere Tabsets ineinander geschachtelt werden sollen. Durch eine unterschiedliche Farbgebung können diese vom Benutzer besser auseinandergehalten werden.

Achtung: für die angegebene Farbe müssen entsprechende Image Ressourcen für den DefaultPainter vorhanden sein - Beispiel /fw/def/image/tab/tabLSel_<<Farbname>>.gif

Anmerkung: Es muss ein gültiger HTML-Farbcode angegeben werden. Das kann ein Farbcode wie #ff0000 oder ein Farbname wie beispielsweise red sein

 
borderInteger Gibt die Stärke des Rahmens an, welcher um das Kontrollelement gezeichnet werden soll.  
disabledBoolean Über dieses Attribut kann das Kontrollelement deaktiviert werden. Es nimmt dann keine Benutzereingaben entgegen und erzeugt keine Kontrollelement Ereignisse.  
filterboolean Dieses Flag gibt an ob eine HTML-Konvertierung der Taben Beschriftungen durchgeführt werden soll.  
formElementBoolean Über dieses Attribut wird gesteuert, wie sich das Kontrollelement im Falle einer Benutzer Aktion verhalten soll.
Als Formularelement
Es wird ein Submit des umschliessenden Formulars ausgeführt. Alle Informationen über das Kontrollelement Ereignis werden in Hidden Feldern zum Server transportiert.
Als eigenständiges Kontrollelement
Kontrollelement Ereignisse werden direkt in Form von Hyperlinks ausgelösst. Sämtliche eingegeben Daten in der HTML Seite gehen damit verloren!
Intern wird über dieses Attribut gesteuert, wie der ActionPainter Links generieren soll - als HTML-a Tag oder HTML-input Tag.

Anmerkung: Der Wert true (= Formularelement) darf nur dann verwendet werden, wenn sich das Kontrollement in einem Formular befindet.

 
heightString Setzt die Höhe des Kontrollelmentes. Die Höhe kann absolut oder prozentual angegeben werden.

Es hängt von dem jeweiligen Kontrollelement Painter ab, ob dieses Attribut ausgewertet wird.

Siehe HTML-Dokumentation

 
idString Weist dem Kontrollelement einen eindeutigen Bezeichner zu. Im Tag Body wird daraufhin eine Java Variable angelegt, auf die in Java Scriptlets zugegriffen werden kann. Diese Variable verweist auf die Kontrollelement Instanz (abgeleitet von Control).

Dieses Attribut wird meist in Verbindung mit dem type Attribut verwendet

Anmerkung: Da zur JSP Compile Zeit eine Java Variable mit diesem Bezeichner angelegt wird, muss hier ein String Literal (und keine Expression!) angegeben werden! Der Bezeichner muss den Regeln für gültiger Java Bezeichner folgen.

 
imagemapString Mit diesem Attribut wird dem Tabset eine Imageliste zugewiesen, mit deren Hilfe den einzelnen Taben Images zugeordnet werden können.

Die Image Zuordnung wird direkt im <tab>-Element angegeben, wobei implizit die Suffixe .sel bzw. .unsel angehängt werden, um zwischen dem selektierten und unselektierten Zustand unterscheiden zu können

Anmerkung: Unter dem Namen muss eine ImageMap im Request abgelegt sein.

 
labellengthInteger Gibt die maximale Zeichenzahl für die Labels der Taben an. Wenn ein Label länger ist, dann wird es mit "..." abgekürzt.
Dieses Attribut wird nur dann berücksichtigt, wenn das filter-Attribut auf true eingestellt ist
 
localeString Weist das Kontrollelement an alle angegebenen Zeichenkettenliterale als Schlüssel für Textressourcen zu interpretieren.

Die folgenden Werte sind möglich:

  • "true" Die Lokalisierung ist aktiv und es wird die von Struts vergebene Ländereinstellung des angemeldenten Benutzers verwendet (wie in der HTTP Session unter dem Schlüssel org.apache.struts.action.LOCALE abgelegt).
  • "false" Die Lokalisierung ist nicht aktiviert. Alle Zeichenkettenliterale werden wie angegeben in die HTML Seite geschrieben.
  • ISO Code Die Lokalisierung ist aktiv und es wird die angegebene Sprache verwendet.

Bei aktivierter Lokalisierung werden die angegebenen Schlüssel von dem registrierten FrameworkAdapter (eine Interface Klasse) mit Hilfe der überschreibbaren localizeKey() Methode übersetzt. Der mitgelieferte StrutsFrameworkAdapter verwendet die in der struts-config.xml registrierten Message Resource Bundles für die Übersetzung des Ressourcen Schlüssels.

Zeichenketten die mit einem "#"-Zeichen beginnen werden grundsätzlich nicht lokalisiert (Das "#"-Zeichen wird jedoch abgeschnitten).

Alle Zeichenketten die von einem DataModel zurückgeliefert werden, sind ebenfalls von dem Lokalisierungsmechanismus ausgeschlossen, da dies in den Aufgabenbereich der Applikation fällt.

 
nameString Gibt den Namen der Java-Bean - eine Instanz der Klasse Control. Die Java-Bean muss im angegebenen Scope abgelegt sein.

Wenn das Tag von einem Struts <html:form> Tag umschlossen ist, dann muss kein Bean Name angegeben werden. In diesem Fall wird die Java-Bean über ein Property der Struts Formular Bean gezogen.

Anmerkung: Es muss ein gültiger Java Bezeichner angegeben werden.

 
overlappingboolean Dieses Flag gibt an ob die Taben überlappend gezeichnet werden sollen.  
permissionACL Mit diesem Attribut kann der Zugriff auf das Element beschränkt werden.

Berechtigungen werden über das Principal Objekt in der Benutzer Session geprüft. Das Principal Objekt wird mit der Methode SecurityUtil.registerPrincipal() in der Session registriert. Es wird vom Anwendungsentwickler durch Implementierung des Principal Interfaces zur Verfügung gestellt. Somit lassen sich sehr einfach beliebige Berechtigungssysteme mit dem Framework verbinden.

Berechtigungen werden immer in Form einer Access Control List (ACL) angegeben. Dabei handelt es sich um einen Ausdruck dessen Elemente Einzelberechtigungen sind. Das Framweork unterstützt die folgenden Berechtigungstypen, welche jedoch vom Anwendungsentwickler beliebig erweitert werden können:

Literal
true|false -> StaticPermission
Rolle
#rollenname -> RoleBasedPermission
Funktion
$funktionsname -> FunctionBasedPermission

Zur Formulierung der Ausdrücke kann die folgende Syntax verwendet werden:

PERMISSION_PREFIX
	: '#' | '$'

AND_OP
	: 'and' | '&' | '*'

XOR_OP
	: 'xor' | '^'

OR_OP
	: 'or' | '|' | '+'

UNARY_OP
	: '~' | '!'

permission
	: PERMISSION_PREFIX IDENTIFIER

primary_expr
	: permission
	| '(' expr_list ')'

unary_expr
	: primary_expr
	| UNARY_OP primary_expr

logical_and_expr
	: unary_expr
	| logical_and_expr AND_OP unary_expr

logical_xor_expr
	: logical_and_expr
	| logical_or_expr XOR_OP logical_and_expr

logical_or_expr
	: logical_xor_expr
	| logical_or_expr OR_OP logical_xor_expr

expr_list
	: logical_or_expr
	| expr_list ';' logical_or_expr
	| expr_list ',' logical_or_expr

Access Control Listen werden mit der statischen Methode AccessControlList.parse() eingelesen. Der Parser verwendet wiederum die statische Methode PermissionFactory.parse() um die einzelnen Permissions zu lesen. Der Anwendungsentwickler kann über die PermissionFactory eigene von Permission abgeleitete Klassen registrieren und so den Sprachumfang der ACL erweitern.

 
propertyString Gibt den Namen des Properties an, über welchen auf die Java-Bean zugegriffen werden soll. Dies ist in der Regel nur dann notwendig, wenn die Java-Bean mit einer Struts Formular Bean assoziiert ist.

Anmerkung: Es muss ein gültiger Java Bezeichner angegeben werden.

 
runatRunAt Dieses Attribut gibt an, ob für das Kontrollelement JavaScript verwendet werden soll, oder ob das Kontrollelement ausschließlich mit Server Roundtrips arbeiten soll.
  • server = Alle Kontrollelement Aktionen führen zu einem Server Roundtrip und werden auf dem Server bearbeitet.
  • client = Kontrollelement Aktionen werden direkt im Browser des Benutzers durchgeführt. Es hängt von der verwendeten Painter Factory und dem konkreten Kontrollelement Painter ab, wie weit die Unterstützung für Clientside Scripting geht.
  • auto = Das Framework wählt basierend auf der JavaScript Aktivierung des Anwender Browsers den Modus "client" bei aktiviertem JavaScript und "server" bei deaktiviertem JavaScript (siehe BrowserInfo).
 
scopeHttpScope Dieses Attribut gibt den Scope an, in welchem die Java-Bean mit den eigentlichen Anzeigedaten zu finden ist.
  • any = Nach der Bean wird in jedem Scope gesucht.
  • page = Die Bean liegt im PageContext der JSP Seite.
  • request = Die Bean liegt im HTTP Servlet Request
  • session = Die Bean liegt in der HTTP Session
  • application = Die Bean liegt applikationsweit im Servlet Kontext
 
shadowBoolean Gibt an ob das Kontrollelement mit einem Schatten hinterlegt werden soll.

Diese Funktion ist nur bei bestimmten Painterfactories verfügbar

 
stackedBoolean Schaltet die gestapelte Anzeige der Taben an oder aus. Das Attribut stacked ist immer in Verbindung mit dem Attribut tabs zu verwenden.  
styleString Über dieses Attribut kann direkt ein HTML-style Attribut angegeben werden.

Anmerkung: Siehe HTML Dokumentation für das Attribut style.

 
styleClassString Über dieses Attribut kann direkt ein HTML-class Attribut angegeben werden.

Anmerkung: Siehe HTML Dokumentation für das Attribut class.

 
styleIdString Über dieses Attribut kann direkt ein HTML-id Attribut angegeben werden.

Anmerkung: Siehe HTML Dokumentation für das Attribut id.

 
summaryString Gibt einen nicht sichtbaren Summary zu dem Kontrollelement auf der HTML Seite aus. Diese Information kann von speziellen Anzeigegeräten dargestellt werden - zum Beispiel als Sprachausgabe oder Braille Schrift.  
tabindexInteger Legt den Tabulator Index für dieses Element fest.  
tabsInteger Gibt die Anzahl der gleichzeitig angezeigten Taben an. Je nach Anzeigemodus hat dies die folgenden Auswirkungen
Im gestapelten Modus
Je Zeile werden maximal soviele Taben angezeigt, wie in diesem Attribut angegeben
Im ungestapelten Modus
Wenn das Kontrollelement über mehr Taben verfügt, dann werden Schaltflächen zum Rollen der Taben-Liste angeboten.
 
transactionBoolean Mit diesem Flag wird angegeben ob ein Transaction Token (siehe Struts Token Dokumentation) an alle Hyperlinks des Kontrollelementes angehängt werden soll.

Mit dem Transaction Token können Form Re-submissions (mehrfaches Absenden eines HTML Formulars) erkannt werden.

Funktionsweise: Das Transaction Token is ein "Stempel" mit welchem die Applikation jede generierte HTML Seite stempelt (es wird ein hidden Field bzw. zusätzliche URL Parameter für alle Hyperlinks erzeugt). Bei einem Server Request kann der vom Browser zurückgeliefert Stempel mit dem in der Session gespeicherten Wert verglichen werden. Wenn der Wert übereinstimmt, dann passt die Seite zum aktuellen Applikations Zustand.
Stimmt der Stempel nicht überein, dann sind Applikationszustand und Browser Inhalt asynchron und die Applikation kann auf diesen Fehler - wie auch immer - reagieren. Eine Abweichung entsteht immer dann, wenn der Anwender eine ältere Seite aus der Browser Historie absendet.

 
valueString Über dieses Attribut kann die selektierte Tabe direkt in der JSP-Seite angegeben werden.  
widthString Setzt die Breite des Kontrollelmentes. Die Breite kann absolut oder prozentual angegeben werden.

Siehe HTML-Dokumentation

 
 

[ Server Ereignisse ]

EreignisBeschreibung
TabClick
public void control_onTabClick(
	ControlRequestContext ctx,
	String tabId) throws Exception

[ Beispiel ]

Erzeugt ein einfaches Tabset mit zwei Taben und einer ImageMap.


<%@ taglib uri="http://www.common-controls.com/cc/tags-ctrl"    prefix="ctrl" %>
<%@ taglib uri="http://www.common-controls.com/cc/tags-util"   prefix="util" %>

<util:imagemap name="im_tabs">
    <util:imagemapping  rule="def"        src="images/imgDefault.gif"   width="13"  height="13"/>
    <util:imagemapping  rule="cor.unsel"  src="images/imgCorUnsel.gif"  width="13"  height="13"/>
    <util:imagemapping  rule="cor.sel"    src="images/imgCorSel.gif"    width="13"  height="13"/>
</util:imagemap>

<ctrl:tabset
    id="detail"
    name="detailView"
    width="100%"
    bgcolor="#dadfe0"
    imagemap="im_tabs"
    formElement="true">


    <ctrl:tab  id="DEF"  title="Default"      content="Page_Form_Def.jsp"  tooltip="Default View"  imageref="def"/>
    <ctrl:tab  id="COR"  title="Corrections"  content="Page_Form_Cor.jsp"  tooltip="Corrections"   imageref="cor"/>
</ctrl:tabset>