Die Common-Controls Tag Bibliothek

<ctrl:scheduler>

Erzeugt einen Terminkalender zur Verwaltung von Terminen und Terminserien.
../images/images/scheduler_small.gif

Body content: JSP
Tag class: SchedulerTag
 

[ Syntax ]

Standard Syntax
<ctrl:scheduler
[ action = "String" ]
[ addButton = "ACL" ]
[ ajax = "Boolean" ]
[ allDayArea = "Boolean" ]
[ border = "Integer" ]
[ checkboxes = "boolean" ]
[ columns = "Integer" ]
[ compressWeekEnds = "Boolean" ]
[ createButton = "ACL" ]
[ dayEndHour = "Integer" ]
[ dayStartHour = "Integer" ]
[ disabled = "Boolean" ]
[ exportListButton = "ACL" ]
[ filter = "Boolean" ]
[ firstDayOfWeek = "{Def | Mo | Tu | We | Th | Fr | Sa | Su}" ]
[ formElement = "Boolean" ]
[ height = "String" ]
[ help = "String" ]
[ hideButtons = "Stringliste" ]
[ id = "String" ]
[ imagemap = "String" ]
[ interval = "Integer" ]
[ locale = "String" ]
[ maxVisible = "Integer" ]
[ monthIncrement = "Integer" ]
[ name = "String" ]
[ noframe = "Boolean" ]
[ permission = "ACL" ]
[ popups = "Boolean" ]
[ printListButton = "ACL" ]
[ property = "String" ]
[ refreshButton = "ACL" ]
[ rows = "Integer" ]
[ runat = "{server | client | auto}" ]
[ scope = "{any | page | request | session | application}" ]
[ shadow = "Boolean" ]
[ style = "String" ]
[ styleClass = "String" ]
[ styleId = "String" ]
[ tabindex = "Integer" ]
[ title = "String" ]
[ transaction = "Boolean" ]
[ view = "{day | workweek | week | month | year}" ]
[ viewButtons = "Semikolon getrennte Liste" ]
[ weekEndDays = "Boolean" ]
[ width = "String" ]
[ workEndHour = "Integer" ]
[ workingDays = "Semikolon getrennte Liste" ]
[ workStartHour = "Integer" ]
>
...Body Content...

</ctrl:scheduler>
 

[ 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.

 
addButtonACL Gibt an, ob eine Schaltfläche zur Datensatz Neuanlage angezeigt werden soll. Über die Angabe einer Access Control List (ACL) kann die Neuanlage auf bestimmte Benutzer beschränkt werden.  
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>

				
 
allDayAreaBoolean Sets a value specifying whether the all-day area is displayed.  
borderInteger Gibt die Stärke des Rahmens an, welcher um das Kontrollelement gezeichnet werden soll.  
checkboxesboolean Gibt an, ob vor den Appointments eine Checkbox angezeigt werden soll.

Die Appointments müssen das Checkable Interface implementieren, damit das Kontrollelement die Checkboxen zeichnen kann.

 
columnsInteger Legt die Anzahl der angezeigten Spalten (Monate) in der Jahres Sicht fest  
compressWeekEndsBoolean Dieses Attribut legt fest ob die Wochenend Tage zusammengefasst werden sollen, um Platz zu spaaren  
createButtonACL Gibt an, ob eine Schaltfläche zur Datensatz Neuanlage angezeigt werden soll. Über die Angabe einer Access Control List (ACL) kann die Neuanlage auf bestimmte Berechtigungen beschränkt werden.  
dayEndHourInteger Sets a value indicating the end of the hour range displayed by the Schedule on DayView.

Anmerkung: valid values range from 0 to 23

 
dayStartHourInteger Sets a value indicating the start of the hour range displayed by the Schedule on DayView.

Anmerkung: valid values range from 0 to 23

 
disabledBoolean Über dieses Attribut kann das Kontrollelement deaktiviert werden. Es nimmt dann keine Benutzereingaben entgegen und erzeugt keine Kontrollelement Ereignisse.  
exportListButtonACL Gibt an, ob eine Schaltfläche zum Datenexport angezeigt werden soll. Über die Angabe einer Access Control List (ACL) kann die Schaltfläche auf bestimmte Berechtigungen beschränkt werden.  
filterBoolean Mit dem filter-Attribut kann die automatische HTML-Konvertierung des Elementes aktiviert bzw. deaktiviert werden.
  • true = Die HTML Konvertierung ist aktiv. So wird beispielsweise das "<" Zeichen als "&lt;" codiert. HTML Code wird damit nicht ausgeführt.
  • false = Die HTML Konvertierung ist abgeschaltet. HTML Code wird demzufolge direkt in die Seite eingesetzt und somit ausgeführt.
 
firstDayOfWeekString Setzt den ersten Tag der Woche
  • Def = Verwendet den Wochen Start Tag des aktiven Locale
  • Mo = Montag
  • Tu = Dienstag
  • We = Mittwoch
  • Th = Donnerstag
  • Fr = Freitag
  • Sa = Samstag
  • Su = Sonntag
 
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

 
helpString Weist dem Kontrollelement einen Hilfe Bezeichner zu. Es wird ein Hilfe Symbol neben dem Kontrollelement angezeigt, welches bei einem Klick einen onHelp Event erzeugt. Der Bezeichner wird dabei als Parameter übergeben und kann somit zur Anzeige von kontextabhängigen Hilfetexten benutzt werden.

Das eigentliche Hilfesystem ist nicht Teil des Common-Controls Frameworkes, der onHelp Event kann jedoch zur Verankerung verwendet werden.

Für die Erzeugung des Hyperlinks zum Aufruf der Hilfe sind einige vordefinierte Framework Ressourcen zuständig. Diese kann der Anwendungsentwickler global oder auf Kontrollelement Ebene verändern:

Resource KeybeschreibungVorgabewert
fw.help.onclickEin optionaler onclick JavaScript Handler. Der Handler kann einen {0} Markup für den Hilfe Bezeichner enthalten-
fw.help.targetGibt an wo der Hilfe Hyperlink geöffnet werden soll_blank
fw.help.tooltiptooltip Text für den Hilfe Hyperlinkcontext help

Anmerkung: Der Hilfe Bezeichner wird von dem Common-Controls Framework an das Hilfesystem weitergegeben. Die Syntax und Semantik hängt daher von dem verwendeten Hilfesystem ab.

 
hideButtonsStringliste Mit diesem Attribut kann eine Liste von Schaltflächen ausgeblendet werden. Die auszublendenden Schaltflächen werden in einer Semikolon getrennten Liste angegeben.

Anmerkung: Mit Semikolon getrennte Liste von Schaltflächen Namen. Die Namen müssen dabei einer der ControlButton.getName() Konstanten entsprechen!

 
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 Gibt den Namen einer Imagemap an, welche im Request abgelegt sein muss. Die Werte welche das property liefert werden auf die Einträge dieser ImageMap abgebildet. Die Abbildung erfolgt anhand des regulären Ausdrucks welcher jedem Eintrag der ImageMap zugeordnet ist.

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

 
intervalInteger Sets a value specifying the interval in which the hour is divided.

Anmerkung: valid values are 5, 6 , 10, 15, 30, 60

 
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.

 
maxVisibleInteger Setzt die Anzahl der maximal für einem Tag angezeigten Termin.  
monthIncrementInteger Sets the number of month to increment in year view when the user clicks on one of the navigation buttons. A value of 0 resets the the control to the default increment which is the number of visible months (= rows * columns)  
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.

 
noframeBoolean Mit Hilfe dieses Attributes kann der Rahmen des Kontrollelementes unterdrückt werden. Eventuell notwendige Schaltflächen werden rechts über dem Kontrollelement angezeigt (abhängig von der verwendeten PainterFactory.  
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.

 
popupsBoolean Dieses Attribut legt fest ob existierende Termine in der Jahres Sicht in einem Popup Fenster angezeigt werden sollen  
printListButtonACL Gibt an, ob eine Schaltfläche zum Drucken angezeigt werden soll. Über die Angabe einer Access Control List kann die Schaltfläche auf bestimmte Benutzer beschränkt werden.  
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.

 
refreshButtonACL Gibt an, ob eine Schaltfläche zum Aktualisieren der Elemente angezeigt werden soll.  
rowsInteger Legt die Anzahl der angezeigten Zeilen (Monate) in der Jahres Sicht fest  
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

 
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.

 
tabindexInteger Legt den Tabulator Index für dieses Element fest.  
titleString Die Hauptüberschrift des Kontrollelementes.

Überschrift und Detail können auch gemeinsam in der Form "title - detail" angegeben werden.

 
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.

 
viewScheduleView Dieses Attribut gibt an wie der Kalender angezeigt werden soll.
  • day = Es wird ein einzelner Tag angezeigt
  • workweek = Die Arbeitstage einer Woche werden in Tages Sicht angezeigt
  • week = Alle Tag einer Woche werden angezeigt
  • month = Alle Tage eines Monats werden angezeigt
  • year = Erzeugt einen oder mehrere verkürzten Monatsübersichte
 
viewButtonsSemikolon getrennte Liste Mit diesem Attribut wird angegeben welche Schaltflächen zur Umschaltung der Sicht angeboten werden sollen. Es kann eine durch Semikolon getrennten Liste von Schaltflächen angegeben werden:
  • false = Es werden keine Schaltflächen zur View Umschaltung angeboten
  • true = Es werden alle Schaltflächen zur View Umschaltung angeboten
  • day = Tages Ansicht
  • workweek = Wochentags Ansicht (5 Tage)
  • week = Wochen Ansicht
  • month = Monats Ansicht
  • year = Jahres Ansicht
 
weekEndDaysBoolean Dieses Attribut legt fest ob die Wochenende Tage angezeigt werden sollen (Samstag und Sonntag)  
widthString Setzt die Breite des Kontrollelmentes. Die Breite kann absolut oder prozentual angegeben werden.

Siehe HTML-Dokumentation

 
workEndHourInteger Sets a value indicating the end time of the day for the working hours.

Anmerkung: valid values range from 0 to 23

 
workingDaysSemikolon getrennte Liste Aufzählung der Arbeitstage einer Woche. Die Liste enthält die durch Semikolon getrennten Wochentags Namen (in Englisch):
  • Su = Sonntag
  • Mo = Montag
  • Tu = Dienstag
  • We = Mittwoch
  • Th = Donnerstag
  • Fr = Freitag
  • Sa = Samstag
 
workStartHourInteger Sets a value indicating the start time of the day for the working hours.

Anmerkung: valid values range from 0 to 23

 
 

[ Server Ereignisse ]

EreignisBeschreibung
AddAppointment
public void control_onAddAppointment(
	ControlRequestContext ctx,
	long timeInMillis) throws Exception
Dieses Event wird ausgelößt, wenn der Anwender eine Add Appointment Schaltfläche betätigt.
Die Applikation sollte einen neuen Termin für die angegebene Zeit erzeugen.
AppointmentClick
public void control_onAppointmentClick(
	ControlRequestContext ctx,
	String key,
	long timeInMillis) throws Exception
Dieses Event wird ausgelößt, wenn der Anwender einen Termin anklickt.
Liegt in der Verantwortung der Applikation.
Die Applikation kann beispielsweise die Termin Details angezeigen.
ChangeDate
public void control_onChangeDate(
	ControlRequestContext ctx,
	long timeInMillis,
	String view) throws Exception
Dieses Event wird ausgelößt, wenn der Anwender auf ein anderes Datum wechselt.
Das Anzeigedatum des Kontrollelementes wird auf das neue Datum eingestellt.
CheckAppointment
public void control_onCheckAppointment(
	ControlRequestContext ctx,
	String key,
	long timeInMillis,
	boolean check) throws Exception
CheckDate
public void control_onCheckDate(
	ControlRequestContext ctx,
	long timeInMillis,
	SchedulerScope scope,
	boolean check) throws Exception
Create
public void control_onCreate(
	ControlActionContext ctx) throws Exception
ExportList
public void control_onExportList(
	ControlActionContext ctx) throws Exception
PrintList
public void control_onPrintList(
	ControlActionContext ctx) throws Exception
Refresh
public void control_onRefresh(
	ControlActionContext ctx) throws Exception
SelectDate
public void control_onSelectDate(
	ControlRequestContext ctx,
	long timeInMillis,
	String view) throws Exception
View
public void control_onView(
	ControlRequestContext ctx,
	String view) throws Exception

[ Beispiel ]

Verwendung des Scheduler-Kontrollelements.


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

<ctrl:scheduler
   action="/sample901/scheduler"
   name="scheduler"
   title="scheduler.title"
   imagemap="im_category"
   createButton="true"
   refreshButton="true"
   noframe="false"
   width="100%"
   view="month"
   interval="30"
   dayStartHour="6"
   dayEndHour="20"
   maxVisible="3"
   rows="3"
   columns="3"
   weekEndDays="false"
   popups="true"
   filter="false"
   checkboxes="false"
   firstDayOfWeek="mo">

</ctrl:scheduler>