JavaServer Faces. Bernd Müller. Ein Arbeitsbuch für die Praxis ISBN Leseprobe
|
|
- Inge Lorenz
- vor 8 Jahren
- Abrufe
Transkript
1 JavaServer Faces Bernd Müller Ein Arbeitsbuch für die Praxis ISBN Leseprobe Weitere Informationen oder Bestellungen unter sowie im Buchhandel
2 Kapitel 3 Der Anwendungsprototyp Ein Arbeitsbuch für die Praxis darf JavaServer Faces nicht durch eine (unzusammenhängende) Aneinanderreihung von Beschreibungen einzelner Spracheigenschaften und Konzepte einführen, sondern muss anhand einer realistischen Aufgabe die gebotenen JSF-Mittel zu deren Lösung einsetzen. In diesem Kapitel werden wir für die imaginäre JSF-Bank die Anwendung Online-Banking als Prototyp entwickeln, die in stark simplifizierter Art Teile eines realen Online- Bankings nachbildet. Ziel ist die Erstellung einer kompletten Anwendung, die bereits möglichst viele Teile der JSF-Spezifikation verwendet, ohne für den JSF-Anfänger zu komplex zu werden. Nach einer ausführlichen Darstellung von JavaServer Faces im nächsten Kapitel und einer Vorstellung der in Java- Server Faces verfügbaren UI-Komponenten in Kapitel 5 wird der Protoyp in Kapitel 6 dann umfassend überarbeitet. 3.1 Anwendungsfälle Unser Ziel ist die Entwicklung einer kompletten Anwendung, die allerdings noch nachvollziehbar und damit nicht zu komplex sein soll. Um dies zu erreichen, müssen wir uns in der Funktionalität beschränken. Der Prototyp soll fünf einfache Anwendungsfälle umfassen, die wir kurz beschreiben. Anmeldung Ein Benutzer meldet sich mit Kundennummer und Kennwort an. Eine erfolgreiche Anmeldung ist Voraussetzung für die weiteren Anwendungsfälle.
3 22 3 Der Anwendungsprototyp Pflege der Stammdaten Im Falle eines Umzugs, einer Heirat mit Namensänderung etc. soll der Kunde seine Stammdaten selbst aktualisieren können. Überweisung durchführen Das eigentliche Bankgeschäft: Überweisung eines bestimmten Betrages von einem eigenen Konto auf ein beliebiges anderes Konto. Anzeige der Umsätze Für ein auszuwählendes Konto werden alle Umsätze angezeigt. Anzeige der Kurzinformationen zu allen Konten Die Kontostände aller Konten werden angezeigt. 3.2 Technische Architektur JavaServer Faces wird man in Zukunft sicher häufig als GUI-Komponente von Java-EE-Anwendungen einsetzen. Die Business-Objekte einer Java-EE- Anwendung werden in der Regel mit Enterprise-JavaBeans implementiert. JavaServer Faces sind aber nicht an die Verwendung von EJBs gebunden, sondern können mit beliebigen Java-Objekten, insbesondere auch mit POJOs (Plain Old Java Objects), verwendet werden. Unser Projekt Online-Banking wird mit POJOs entwickelt. Diese werden mit Hilfe eines Object-Relational-Mappers (OR-Mapper) auf eine relationale Datenbank abgebildet. Es ergibt sich eine technische Architektur, die strukturell in Abbildung 3.1 dargestellt ist. Java- Servlet Container JSF POJO Browser DB HTTP HTTPS View Controller Business Modell Persistenz Abbildung 3.1: Architektur des Prototyps Server Faces realisieren die Kommunikation mit dem Browser. Der Prototyp verwendet als Protokoll HTTP. Eine reale Online-Banking-Anwendung würde HTTPS verwenden. Das Business-Modell ist mit einfachen Java-Klassen
4 3.3 Das Business-Modell 23 realisiert, die über eine Persistenzschicht auf Tabellen einer relationalen Datenbank abgebildet werden. In diesem Kapitel gehen wir auf Probleme des OR-Mappings nicht detaillierter ein, sondern verweisen auf Abschnitt 6.4. JavaServer Faces werden durch Servlets, genauer durch ein Servlet, realisiert. Für den Betrieb einer JSF-Anwendung benötigt man daher einen Servlet- Container. Wir verwenden hier Tomcat, den Servlet-Container der Apache Software Foundation. Tomcat ist die offizielle Referenzimplementierung der Servlet-Spezifikation, weit verbreitet und zudem unentgeltlich sowohl privat als auch kommerziell verwendbar. Als Persistenzschicht kommt Hibernate zum Einsatz. Als Datenbankmanagementsystem verwenden wir das in Java geschriebene und somit auf praktisch jedem Rechner lauffähige HSQLDB. Es kann so konfiguriert werden, dass es nach dem Deployment der Web-Anwendung sofort läuft, so dass aufwändige Installationen, Konfigurationen und insbesondere Datenimporte unnötig sind. 3.3 Das Business-Modell Das Business-Modell des Online-Bankings ist ebenfalls stark simplifiziert. Leser, die bereits ähnliche Systeme erstellt haben, mögen dies verzeihen. Für Lehr- und Lerninhalte zum Thema JavaServer Faces reicht das einfache Business-Modell aber aus. Das Modell enthält Kunden, Konten und ein Transaktionslog. Bei den Konten wird zwischen Giro- und Sparkonten unterschieden. Das entsprechende UML-Klassendiagramm ist in Abbildung 3.2 auf der nächsten Seite dargestellt. Im Folgenden gehen wir davon aus, dass die fünf Business-Klassen wie dargestellt als JavaBeans existieren. Die Attribute jeder Klasse besitzen entsprechende Getter und Setter, und die Assoziationen sind als Methoden Kunde.getKonten(), Konto.getKunde() sowie Konto.getTransaktionen() und Transaktionslog.getKonto() verfügbar. 3.4 Realisierung Die fünf Anwendungsfälle aus Abschnitt 3.1 realisieren wir mit fünf JSF-Seiten. Dies muss nicht immer so sein, wird aber oft zutreffen. Anwendungsfälle, die komplexe Workflows umfassen, werden in der Regel über mehrere JSF-Seiten definiert. Dieses Kapitel dient als Demonstration einer funktional einfachen, aber kompletten Anwendung. Es werden daher nicht alle Einzelheiten im Detail er-
5 24 3 Der Anwendungsprototyp Kunde Konto Transaktionslog -vorname:string -nachname:string -geburtsdatum:date -geschlecht:character -strasse:string -plz:string -ort:string 1 1..* konto -kontostand:bigdecimal 1 0..* transaktionen -betrag:bigdecimal -art:character -datum:date -text:string Sparkonto -zinssatz:bigdecimal Girokonto -ueberziehungskredit:bigdecimal -zinssatzkredit:bigdecimal -zinssatzguthaben:bigdecimal Abbildung 3.2: UML-Klassendiagramm für den Prototyp läutert. Eine detailierte Gesamtdarstellung der Möglichkeiten von JavaServer Faces finden Sie in Kapitel 4, eine Gesamtdarstellung der JSF-Tags im Anhang A Die Anmeldung Für die Anmeldung wird die Kundennummer und das Kennwort benötigt. Genügen beide den Authentifizierungsregeln, so wird der Benutzer in die eigentliche Anwendung weitergeleitet, sonst ist eine Meldung über die missglückte Anmeldung anzuzeigen. Listing 3.1 zeigt die JSF-Seite login.jsp für die Anmeldung. Listing 3.1: Die Seite login.jsp 1 <%@ page session =" false " contenttype =" text / html ; charset = utf-8 "%> 2 <%@ taglib uri =" http: // java. sun. com / jsf / html " prefix ="h"%> 3 <%@ taglib uri =" http: // java. sun. com / jsf / core " prefix ="f"%> 4 5 <! DOCTYPE HTML PUBLIC "-// W3C // DTD HTML 4.01 Transitional // EN" > 6 <html > 7 file =" include / head. inc "%> 8 <body > 9 <f:view > 10 <h:form id=" form " style =" margin: 100 px;"> 11 < h: panelgrid columns =" 2" styleclass =" bordertable "
6 3.4 Realisierung headerclass =" panelheading " > 13 < f:facet name =" header "> 14 < h: outputtext value =" Anmeldung Online- Banking " / > 15 </ f:facet > 16 < h: outputlabel for =" kundennummer " value =" Kundennummer: " / > 17 < h: inputtext id =" kundennummer " 18 value ="#{ kundenhandler. kundennummer " / > 19 < h: outputlabel for =" kennwort " value =" Kennwort: " / > 20 < h: inputsecret id =" kennwort " 21 value ="#{ kundenhandler. kennwort " /> 22 < h: commandbutton action ="#{ kundenhandler. login " 23 value =" Anmelden " /> 24 < h: panelgroup / > 25 </ h: panelgrid > 26 </ h:form > 27 </ f:view > 28 </ body > 29 </ html > In den Zeilen 2 und 3 werden die beiden JSF-Tag-Bibliotheken bekannt gemacht. Tag-Bibliotheken sind eine Spracheigenschaft der JavaServer Pages (JSP), die für JavaServer Faces als Default-Implementierung verwendet werden. Die beiden Präfixe, in diesem Fall h und f, sind beliebig wählbar, man sollte jedoch der üblichen Konvention folgen und diese beiden Buchstaben wählen. Die erste JSF-Komponente ist <f:view>. Diese ist ein Container, das heißt, sie kann andere Komponenten enthalten. Jede JSF-Seite muss als Wurzel eine View enthalten, die alle anderen JSF-Komponenten enthält. Die nächste Komponente ist <h:form>. Diese wird nach dem Rendern in HTML zu einem HTML-Formular. Die Komponente <h:panelgrid> ist ebenfalls ein Container und ordnet ihre eingebetteten Komponenten in Tabellenform an. Dazu wird lediglich die Anzahl der Spalten spezifiziert, die Definition einzelner Zeilen ist nicht möglich. Ein Panel-Grid enthält optional eine Überschrift, die mit der <f:facet>-komponente und Attribut name="header" in Zeile 13 festgelegt wird. Die weiteren, zum Teil mehrfach verwendeten Komponenten sind <h:outputtext>, <h:outputlabel> und <h:inputtext>, die eine Textausgabe, ein Label und ein Eingabefeld erzeugen. Die <h:inputsecret>- Komponente ist eine Eingabekomponente, die den eingegebenen Text jedoch nicht anzeigt und daher in der Regel zur Passworteingabe verwendet wird. Schließlich erzeugt <h:commandbutton> eine Schaltfläche, deren Betätigung zum Aufruf einer Action-Methode führt. Die <h:panelgroup>-komponente wird verwendet, um mehrere Komponenten zusammenzufassen. Hier wird sie als Platzhalter verwendet, um in der letzten Zeile der Tabelle die zweite Spalte zu füllen.
7 26 3 Der Anwendungsprototyp Auch ohne detaillierte Kenntnis der einzelnen Komponenten ist diese JSF-Seite recht gut verständlich, und die aus ihr entstehende HTML-Seite kann bereits erahnt werden. Die entsprechende Darstellung im Browser ist in Abbildung 3.3 dargestellt. Abbildung 3.3: Browserdarstellung von login.jsp Interessant ist nun, wie die JSF-Seite mit dem Java-Handler für diese Seite verbunden wird. Aus der JSF-Seite geht hervor, dass eine JavaBean kunden- Handler mit den Properties kundennummer und kennwort sowie der Action- Methode login verwendet wird. Die Bean ist eine Instanz der in Listing 3.2 dargestellten Klasse KundenHandler. Diese Art Bean wird in der Originalliteratur auch Backing-Bean genannt. Listing 3.2: Die Managed-Bean KundenHandler /** * Nach einem erfolgreichen Login merkt sich die * KundenHandler - Instanz den Kunden. */ public class KundenHandler { private String kundennummer ; private String kennwort ; private Kunde kunde ; // Der Kunde, global fuer Session private List konten ; // Konten dieses Kunden private List kontenitems ; // Zur Anzeige in Auswahlmenues public String login () {
8 3.4 Realisierung 27 // in der Version 1.0 ein wenig vereinfacht if ( kundennummer. equals (" 0815 ") && kennwort. equals (" geheim ")) { kunde = new KundeDAO (). getkundebyid (1111); konten = new ArrayList ( kunde. getkonten ()); return " success "; else { return " failure "; public List getkontenitems () { if ( this. kontenitems == null ) { List kontenitems = new ArrayList (); for ( Iterator i = konten. iterator (); i. hasnext ();) { Konto tmp = ( Konto ) i. next (); kontenitems. add ( new SelectItem ( tmp, KontoConverter. getasstring ( tmp ))); this. kontenitems = kontenitems ; return this. kontenitems ; // ab hier nur einfache Getter und Setter Für den Anmeldevorgang sind nur die Properties kennwort, kundennummer und kunde mit den nicht dargestellten Gettern und Settern sowie die Methode login() interessant. Die beiden erstgenannten Properties sind durch JSF- EL-Ausdrücke an die beiden <h:inputtext>-komponenten gebunden. Man könnte auch sagen, dass die beiden Komponenten an die Properties gebunden sind. Da die Bindung aber bidirektional ist, ist beides richtig. Wenn die login-methode aufgerufen wird, stehen in den beiden Properties bereits die korrekten Werte des HTML-Formulars. In der Bedingung der If-Verzweigung kann daher getestet werden, ob die Kundennummer 0815 und das Kennwort geheim ist. Dieser sehr einfache Fall ist dem einführenden Charakter dieser Authentifizierung geschuldet. In Kapitel 6 wird die Authentifizierung nach dem in der Servlet-Spezifikation festgelegten Verfahren vorgenommen. Falls die Eingaben von Kundennummer und Kennwort die verlangten Werte haben, wird den Variablen kunde und konten ein Wert zugewiesen und die Methode mit einem Return-Wert von "success" beendet. Wenn nicht, gibt die Methode "failure" zurück. Die Variable kunde bekommt ein Kundenobjekt zugewiesen, das der Klasse Kunde des Klassendiagramms aus Abbildung 3.2 entspricht.
9 28 3 Der Anwendungsprototyp Wir wollen uns an dieser Stelle auf den Umgang mit JavaServer Faces konzentrieren, so dass wir auf die Klasse KundeDAO nicht näher eingehen. Wir verweisen auf Abschnitt 6.4, in dem das so genannte Data-Access-Object-Pattern (DAO) eingehend erläutert wird. Die Methode login() hat einen Rückgabewert vom Typ String. Eigentlich würde man für eine Methode, die durch die Betätigung eines Knopfes aufgerufen wird, eher void oder boolean erwarten. Der Grund für die Verwendung von String ist, dass Action-Methoden vom Laufzeitsystem zur Navigation verwendet werden. Im einführenden Tic-Tac-Toe-Spiel haben wir hiervon keinen Gebrauch gemacht und immer dieselbe Seite angezeigt. Hier soll jedoch abhängig vom Ausgang des Anmeldeversuchs der Benutzer entweder in die eigentliche Anwendung geleitet werden oder eine Seite mit der entsprechenden Information über die missglückte Anwendung angezeigt bekommen. Die Konstante "success" zeigt den geglückten, failure den missglückten Anmeldeversuch an. Wo wird nun der zurückgegebene String verwendet? JavaServer Faces realisiert die Navigation über eine deklarative Beschreibung, die vom so genannten Navigation-Handler interpretiert wird. Basis sind (unter anderem) die von Action-Methoden zurückgegebenen Werte. Die Beschreibung selbst geschieht in der Konfigurationsdatei faces-config.xml, in der auch die Managed-Beans deklariert werden. Der entsprechende Ausschnitt der Konfigurationsdatei für die Navigation der Login-Seite ist in Listing 3.3 dargestellt. Listing 3.3: Navigationsteil der Konfigurationsdatei faces-config.xml < navigation- rule > < description > Das Login </ description > < from-view-id >/ pages / login. jsp </ from-view-id > < navigation- case > < from-outcome > success </ from-outcome > < to-view-id >/ pages / kontenuebersicht. jsp </ to-view-id > </ navigation- case > < navigation- case > < from-outcome > failure </ from-outcome > < to-view-id >/ pages / login. jsp </ to-view-id > </ navigation- case > </ navigation- rule > Ohne im Detail die einzelnen Elemente zu erläutern (dies geschieht in Abschnitt 4.6), sind mit <from-view-id>, <from-outcome> und <to-view-id> schnell die Elemente identifiziert, die für eine gegebene Seite und den Rückga-
10 3.4 Realisierung 29 bewert einer Action-Methode die neue aktuelle Seite bestimmen. Im vorliegenden Fall wird durch einen Rückgabewert "success" zur Seite kontenuebersicht.jsp verzweigt, bei einem Rückgabewert von failure wird die Seite login.jsp erneut angezeigt. Das erneute Darstellen derselben Seite ist der Default-Fall der Navigation, so dass die Angabe entfallen könnte. Als letzter Teil bleibt noch die Deklaration der Managed-Bean kundenhandler. Die Deklaration einer Managed-Bean erfolgt, wie wir bereits beim Tic-Tac- Toe-Spiel gesehen haben, in derselben Konfigurationsdatei. Der entsprechende Ausschnitt ist in Listing 3.4 dargestellt. Wichtig ist der auf session gesetzte Scope. Jede Session hat daher ihr eigenes KundenHandler-Bean. Listing 3.4: Die Managed-Bean kundenhandler < managed-bean > < managed- bean- name > kundenhandler </ managed- bean- name > < managed-bean-class > de. jsfpraxis. bank. handler. KundenHandler </ managed- bean- class > < managed-bean-scope > session </ managed-bean-scope > </ managed-bean > Validierung der Anmeldedaten Die Kundennummer und das Kennwort werden durch die Methode login() semantisch validiert. Eine syntaktische, zum Teil sogar ebenfalls semantische Validierung kann aber auch durch die JSP-Implementierung selbst vorgenommen werden und somit viele Routineprüfungen überflüssig machen. Im Falle der Anmeldedaten sind sowohl Kundennummer als auch Kennwort Pflichtangaben, das heißt, ein leeres Eingabefeld für diese beiden Daten ist als Fehlerfall zu werten. Im Augenblick gibt die login-methode den String "failure" zurück, und die Navigationsregel besagt, dass dann noch einmal die Login-Seite angezeigt wird, allerdings ohne weitere Information für den Benutzer. Eine entsprechende Fehlermeldung wäre hier angebracht. JavaServer Faces verfügt als einfachste Form der Validierung über den Test auf eine zwingend notwendige Eingabe, aber auch über eine Reihe komplexerer Tests. Der Test auf eine notwendige Eingabe wird durch das boolesche Attribut required deklariert. Die Verwendung des Attributes mit dem Wert true führt aber lediglich dazu, dass die weitere Bearbeitung der Seite unterbleibt und die Methode login erst gar nicht aufgerufen wird. Details über die einzelnen Bearbeitungsschritte einer JSF-Requests werden in Abschnitt 4.1 erläutert. Um
11 30 3 Der Anwendungsprototyp eine Meldung an den Benutzer zu erzeugen, wird die Meldungs-Komponente verwendet. Diese existiert in zwei Formen: <h:message> und <h:messages>. Die erste Form erzeugt eine Meldung für eine bestimmte Komponente, die zweite erzeugt Meldungen für alle Komponenten einer JSF-Seite. Wir verwenden die erste Form. Für die Zuordnung zu einer Eingabekomponente wird das for-attribut verwendet. Um das zweispaltige Layout der Anmeldung nicht zu zerstören, müssen die Meldungen und die Eingaben zusammengefasst werden. Hier kommt das Tag <h:panelgroup> zum Einsatz. Listing 3.5 zeigt den Ausschnitt aus der überarbeiteten Login-Seite. Listing 3.5: Login-Seite mit Fehlermeldung 1 < h: outputlabel for =" kundennummer " value =" Kundennummer: " / > 2 < h:panelgroup > 3 < h: inputtext id =" kundennummer " required =" true " 4 value ="#{ kundenhandler. kundennummer " /> 5 < h: message for =" kundennummer " / > 6 </ h: panelgroup > 7 < h: outputlabel for =" kennwort " value =" Kennwort: " / > 8 < h:panelgroup > 9 < h: inputsecret id =" kennwort " required =" true " 10 value ="#{ kundenhandler. kennwort " /> 11 < h:message for =" kennwort " /> 12 </ h: panelgroup > Bleibt bei der überarbeiteten Seite eines der beiden Eingabefelder leer, wird die entsprechende Fehlermeldung für die Message-Komponente erzeugt. Abbildung 3.4 zeigt die Darstellung im Browser, wenn beide Felder bei der Betätigung der Schaltfläche leer sind. Der Fehlertext wird in englischer Sprache dargestellt, was nicht sonderlich befriedigend ist. Weil Java von Haus aus bereits viele Möglichkeiten der Lokalisierung mitbringt, bauen JavaServer Faces hierauf auf und erlauben es, mit relativ wenig Aufwand Anwendungen zu lokalisieren. Eine Möglichkeit ist die Verwendung des locale-attributs im <f:view>-tag: < f:view locale =" Locale. GERMAN "> Alternativen für die Lokalisierung auf Anwendungs- und nicht auf Seitenebene werden in Abschnitt 4.7 dargestellt. Nach dieser Änderung wird die Seite bei fehlenden Eingaben wie in Abbildung 3.5 dargestellt.
12 3.4 Realisierung 31 Abbildung 3.4: Originalfehlermeldungen Abbildung 3.5: Fehlermeldungen mit deutscher Lokalisierung Während der Entwicklung einer JSF-Seite empfehlen wir die Verwendung des Tags <h:messages> z. B. am Ende der Seite. So werden alle auftretenden Fehler auch tatsächlich angezeigt. Wir werden in Abschnitt 4.4 noch weitere Möglichkeiten der Validierung kennen lernen Pflege der Stammdaten Der Anwendungsfall Pflege der Stammdaten ermöglicht es Bankkunden, ihre Stammdaten selbst zu aktualisieren, z. B. nach einem Umzug oder nach einer Namensänderung. Die entsprechende JSF-Seite ist typisch für die Stammdatenverwaltung und wird in abgewandelter Form häufig in betrieblichen Informationssystemen Verwendung finden. Wir stellen hier zunächst die Seitendar-
13 32 3 Der Anwendungsprototyp stellung vor, um danach die entsprechenden JSF-Elemente zu ihrer Entwicklung zu erarbeiten. Abbildung 3.6: Seite für den Anwendungsfall Pflege der Stammdaten Abbildung 3.6 zeigt die zu erstellende Seite zur Pflege der persönlichen Daten. Man erkennt bereits die Tabellenform, die typische zeilenweise Beschriftung und Eingabe-Anordung sowie eine Schaltfläche zum Abspeichern von Änderungen. Ebenfalls zu erkennen ist die Menüführung auf der linken Seite. Die JSF- Spezifikation kennt in der Version 1.1 keine Menükomponente. Wir verwenden hier jedoch MyFaces. In dieser Implementierung ist eine Menükomponente vorhanden, die wir auch einsetzen. Eine alternative Umsetzung ausschließlich mit Komponenten der Spezifikation ist möglich, benötigt dann aber aufwändigere Konstrukte im HTML- und CSS-Code und soll hier nicht weiter Gegenstand sein. Auf der Web-Site des Buches steht der Quell-Code für die dargestellten Seiten zur Verfügung. Wir gehen daher im Folgenden nicht auf das Menü, den Seitenkopf und die Fußzeile ein und verweisen für weitere Informationen auf die Web-Site des Buches, von der Sie den kompletten Quell-Code herunterladen können. Listing 3.6: Persönliche Daten als JSF-Code (persoenliche-daten.jsp) 1 <h:form id=" form "> 2 < h: panelgrid columns =" 2" styleclass =" bordertable "
14 3.4 Realisierung 33 3 style =" width: 100%; " headerclass =" panelheading " > 4 < f:facet name =" header "> 5 < h: outputtext value =" Persönliche Daten " / > 6 </ f:facet > 7 < h:outputlabel for =" anrede " value =" Anrede: " /> 8 < h: selectonemenu id =" anrede " 9 value ="#{ persoenlichedatenhandler. kunde. geschlecht " > 10 < f: selectitem itemvalue =" m" itemlabel =" Herr "/ > 11 < f: selectitem itemvalue =" w" itemlabel =" Frau "/ > 12 </ h: selectonemenu > 13 < h: outputlabel for =" vorname " value =" Vorname: " / > 14 < h: inputtext id =" vorname " 15 value ="#{ persoenlichedatenhandler. kunde. vorname " / > 16 < h: outputlabel for =" nachname " value =" Nachname: " / > 17 < h: inputtext id =" nachname " 18 value ="#{ persoenlichedatenhandler. kunde. nachname " / > 19 < h: outputlabel for =" geburtsdatum " value =" Geburtsdatum: " / > 20 < h: inputtext id =" geburtsdatum " 21 value ="#{ persoenlichedatenhandler. kunde. geburtsdatum " > 22 < f:convertdatetime pattern ="dd.mm. yyyy " /> 23 </ h: inputtext > 24 < h: outputlabel for =" strasse " value =" Straße: " / > 25 < h: inputtext id =" strasse " 26 value ="#{ persoenlichedatenhandler. kunde. strasse " / > 27 < h:outputlabel for =" plz " value =" PLZ: " /> 28 < h:inputtext id=" plz " 29 value ="#{ persoenlichedatenhandler. kunde. plz " /> 30 < h:outputlabel for =" ort " value =" Ort: " /> 31 < h:inputtext id=" ort " 32 value ="#{ persoenlichedatenhandler. kunde. ort " /> 33 </ h: panelgrid > 34 < h: panelgrid columns =" 1" > 35 < h: commandbutton value =" Änderungen speichern " 36 action ="#{ persoenlichedatenhandler. save " / > 37 </ h: panelgrid > 38 </ h:form > Listing 3.6 zeigt den JSF-Code für die Verwaltung der persönlichen Daten. Die ersten Tags sind bereits bekannt. Neu ist das Tag <h:selectonemenu> in Zeile 8. Diese Komponente erzeugt eine Drop-down-Liste, die zur Auswahl der Anrede dient. Über eine Wertebindung wird der aktuelle Wert der Auswahl mit dem JSF-EL-Ausdruck #{ persoenlichedatenhandler. kunde. geschlecht verbunden. Wir hatten bereits bei der Anmeldung derartige Ausdrücke verwendet, jedoch in einfacherer Form. Die JSF-Expression-Language ähnelt der
15 34 3 Der Anwendungsprototyp JSP-Expression-Language und wird in Abschnitt 4.2 vorgestellt. Sie enthält Konzepte, wie man sie auch in JavaScript und XPath, einer Sprache zur Referenzierung von Elementen eines XML-Dokuments, findet. Der obige Ausdruck wird auf zwei Arten verwendet, zum Lesen und zum Schreiben. Er entspricht dabei ungefähr den folgenden Code-Fragmenten: PersoenlicheDatenHandler persoenlichedatenhandler ;... // in die HTML - Ausgabe schreibend : <HTML - Code > persoenlichedatenhandler. getkunde (). getgeschlecht () <HTML -Code >... // aus der HTML - Eingabe lesend : persoenlichedatenhandler. getkunde (). setgeschlecht ( < HTML - Eingabe >); Wenn die JSF-Implementierung den HTTP-Request erhält und beginnt, ihn abzuarbeiten, werden die beteiligten JavaBeans über die Setter mit den Werten des HTML-Formulars versorgt. Nach der Abarbeitung der Anwendungslogik wird auf dem Server HTML-Code erzeugt, bei dem die entsprechenden Formularwerte mit den Werten der JavaBeans über die Getter gesetzt werden. Für die <h:inputtext>-tags ist dies leicht vorstellbar, für das <h:select- OneMenu>-Tag muss ein wenig weiter ausgeholt werden. Dem MVC-Pattern liegt eine völlige Trennung zwischen Modell und View zugrunde. Unser Modell des UML-Klassendiagramms aus Abbildung 3.2 beschreibt das Geschlecht als Zeichen, das die Werte m und w für männlich und weiblich annehmen kann. In der View sind mehrere Möglichkeiten vorstellbar, z. B. als Radio- Button oder als Drop-down-Menü. Wir haben uns für die zweite Möglichkeit entschieden, die mittels eines <h:selectonemenu> zu realisieren ist. Es muss nun eine Konvertierung der Anzeige Herr/Frau zu den Modellwerten m/w und umgekehrt erfolgen. Dies wird durch die geschachtelten <f:selectitem>- Tags erreicht. Der Item-Wert wird für die Getter und Setter der JavaBean verwendet, das Item-Label für die Darstellung in HTML. Die restlichen Eingaben sind Texte, so dass diese unproblematisch sind. Einzige Ausnahme ist das Eingabefeld des Geburtsdatums. Das Geburtsdatum ist auf Bean-Seite vom Typ java.util.date. Auf der HTML-Seite kann es aber nur ein String sein. Da die Konvertierung eines Datums oder etwa einer Zahl in einen String und umgekehrt zu den häufigeren Aufgaben bei der Entwicklung von Web-Anwendungen gehört, stellen JavaServer Faces eine Reihe vordefinierter Konvertierer bereit. Im Falle des Geburtsdatums verwenden wir in Zeile 22 den Datum-Konvertierer, der sehr viele Möglichkeiten der Konfiguration kennt. Eine Möglichkeit der Einstellung erfolgt über ein Pattern,
16 3.4 Realisierung 35 das die Struktur des Datums darstellt. Hier wird als Pattern Tag, Monat, vierstelliges Jahr, durch Punkt getrennt definiert. Die Seite wird mit einer Schaltfläche zum Abspeichern eventueller Änderungen abgeschlossen. In Zeile 36 wird im action-attribut die Methode save() als aufzurufende Methode bei Betätigung der Schaltfläche definiert. Die Java- Implementierung der Methode save() innerhalb der Handler-Bean ist trivial und reduziert sich auf einen Methodenaufruf des DAO-Objekts. Den interessierten Leser vertrösten wir für Persistenzfragen auf Abschnitt 6.4. public class PersoenlicheDatenHandler { private Kunde kunde ; public String save () { new DAO (). saveorupdate ( kunde ); return " success "; Überweisungen Der Anwendungsfall Überweisung durchführen muss für unseren Prototypen etwas eingeschränkt werden. Da nur die JSF-Bank existiert und damit kein Zahlungsverkehr zwischen Banken realisiert werden kann, können Überweisungen nur innerhalb der Konten der JSF-Bank getätigt werden. Bei einer Überweisung sind somit die Kontonummer des Empfängerkontos, der Verwendungszweck und der Betrag anzugeben. Abbildung 3.7 auf der nächsten Seite zeigt die fertige Überweisungsseite im Browser. Die Überweisungsseite ist sehr einfach strukturiert. Die eigentliche Durchführung der Überweisung ist allerdings der komplexeste Anwendungsfall des Prototypen. Schauen wir uns zunächst die JSF-Seite im Quell-Code an, der in Listing 3.7 dargestellt ist. Listing 3.7: Überweisungsseite (ueberweisung.jsp) 1 <h:form id=" form "> 2 < h: panelgrid columns =" 1" styleclass =" standardtable " 3 style =" width: 100%; " headerclass =" panelheading " > 4 < f:facet name =" header "> 5 < h: outputtext value =" Überweisung " / > 6 </ f:facet > 7 < h: panelgrid columns =" 2" styleclass =" bordertable " > 8 < h: outputlabel for =" selectonemenukonto " value =" Konto: " / >
17 36 3 Der Anwendungsprototyp Abbildung 3.7: Überweisungen 9 < h: selectonemenu id =" selectonemenukonto " 10 value ="#{ ueberweisunghandler. konto " 11 converter =" KontoConverter " > 12 < f: selectitems value ="#{ kundenhandler. kontenitems " / > 13 </ h: selectonemenu > 14 < h: outputlabel for =" kontonummer " 15 value =" Kontonummer Empfänger: " / > 16 < h: inputtext id =" kontonummer " required =" true " 17 value ="#{ ueberweisunghandler. kontonummer " / > 18 < h: outputlabel for =" verwendungszweck " 19 value =" Verwendungszweck: " / > 20 < h: inputtext id =" verwendungszweck " required =" true " 21 value ="#{ ueberweisunghandler. verwendungszweck " / > 22 < h:outputlabel for =" betrag " value =" Betrag " /> 23 < h:inputtext id=" betrag " required =" true " 24 value ="#{ ueberweisunghandler. betrag "> 25 < f: validatedoublerange minimum =" 1" maximum =" 1000 " / > 26 </ h: inputtext > 27 </ h: panelgrid > 28 < h: commandbutton id =" ueberweisen " 29 value =" Überweisung durchführen " 30 action ="#{ ueberweisunghandler. ueberweisen " / > 31 </ h: panelgrid > 32 </ h:form > Die ersten Zeilen sind als Wiederholung bereits bekannt. Interessant wird es in den Zeilen 9 bis 13. Hier wird wieder ein <h:selectonemenu>-tag verwen-
18 3.4 Realisierung 37 det, um in der Drop-down-Auswahl eine Liste aller Konten des Kunden zu erzeugen. Während im letzten Beispiel die Unterscheidung der Anrede in Herr und Frau statisch gewesen ist, sind die Konten nicht vorherbestimmt und unterscheiden sich von Kunde zu Kunde. Die Konten müssen daher aus dem Business-Modell bzw. aus der Datenbank geholt und dynamisch für die Darstellung in der Drop-down-Auswahl vorbereitet werden. Um dies zu erreichen, müssen prinzipiell zwei Funktionalitäten realisiert werden: zum einen die Möglichkeit, eine dynamische Liste zu erstellen, zum anderen, Modell-Objekte in Strings (die Anzeige) und Strings in Modell-Objekte konvertieren zu können. Die erste Funktionalität wird durch das <f:selectitems>-tag realisiert, das als value-attribut eine Liste von Objekten des Typs javax.faces.model.selectitem erwartet. Die zweite Funktionalität, die Konvertierung von Modell- Objekten, wird durch einen anwendungsspezifischen Konvertierer realisiert. In Zeile 11 wird der Konvertierer KontoConverter dem Attribut converter zugewiesen. Die weiteren Komponenten der Seite sind bereits bekannt, so dass wir uns der SelectItem-Liste und dem Konvertierer widmen. Die Methode getkontenitems() des Kunden-Handlers liefert die entsprechenden SelectItems. Die Implementierung der Methode ist in Listing 3.8 dargestellt. Listing 3.8: Die Managed-Bean KundenHandler public List getkontenitems () { if ( this. kontenitems == null ) { List kontenitems = new ArrayList (); for ( Iterator i = konten. iterator (); i. hasnext ();) { Konto tmp = ( Konto ) i. next (); kontenitems. add ( new SelectItem ( tmp, KontoConverter. getasstring ( tmp ))); this. kontenitems = kontenitems ; return this. kontenitems ; Die Methode getkontenitems() wird über das <f:selectitems>-tag immer aufgerufen, wenn die Seite neu darzustellen ist. Ein Kunde kann zwar eines seiner Konten kündigen oder ein neues Konto zu den bereits bestehenden hinzubekommen, doch kommt dies während einer Online-Banking-Sitzung relativ selten vor. Der Kunden-Handler merkt sich daher in der Instanzvariablen kontenitems die Liste der Konten als SelectItems. Die Variable wird nach
19 38 3 Der Anwendungsprototyp dem Lazy-Initializer-Pattern erst bei Bedarf, d. h. bei der ersten Verwendung initialisiert, danach bei jedem weiterem Zugriff ohne neuen Berechnungsvorgang zurückgegeben. Die Instanzvariable konten ist die Liste der Konten des Kunden. Der Konstruktor von javax.faces.model.selectitem ist überladen. In der von uns verwendeten Version SelectItem ( java. lang. Object value, java. lang. String label ) wird im ersten Parameter das Objekt selbst, im zweiten Parameter der anzuzeigende String übergeben. Das JSF-Laufzeitsystem erzeugt aus der SelectItem- Liste eine Liste von Strings, die in der Drop-down-Liste zur Anzeige gebracht werden. Umgekehrt muss bei einer Anfrage aus dem selektierten String wieder ein Konto-Objekt erzeugt werden. Hierzu wird ein Konvertierer benötigt. Für alle Standardtypen gibt es entsprechende Konvertierer, für ein Konto muss ein Konvertierer erstellt werden. Das Listing 3.9 zeigt Teile der Konvertiererklasse KontoConverter, die die Konvertierung zwischen Konten und Strings realisiert. Listing 3.9: Der Konvertierer KontoConverter public class KontoConverter implements Converter { public Object getasobject ( FacesContext context, UIComponent component, String value ) throws ConverterException {... public String getasstring ( FacesContext context, UIComponent component, Object value ) throws ConverterException {... public static String getasstring ( Konto konto ) { return konto. tostring (); Ein Konvertierer muss das Interface javax.faces.convert.converter implementieren, das aus den beiden Methoden getasobject() und getasstring()
20 3.4 Realisierung 39 besteht, die einen String in ein Objekt bzw. ein Objekt in einen String konvertieren. Die Implementierung ist durch die Persistenz von Konten nicht trivial, so dass wir an dieser Stelle auf eine detaillierte Darstellung verzichten. Der letzte erwähnenswerte Punkt bei der Überweisungsseite ist die Eingabe und Anzeige des Überweisungsbetrages. Das InputText-Tag ist an die Bean- Property betrag gebunden (Zeile 23). Diese ist vom Typ BigDecimal. Java- Server Faces erkennt den Kompatibilitätskonflikt zwischen String und Big- Decimal und setzt automatisch einen der Standard-Konvertierer ein. Dieser Konvertierer geht im Default-Falle von einer amerikanischen Zahlendarstellung aus, so dass ein Dezimalpunkt statt des im Deutschen üblichen Dezimalkommas verwendet wird. Für den Prototypen ist dieses Verhalten noch zu verzeihen, in der endgültigen Anwendung werden wir dieses Manko beheben. Der in der Überweisungsseite verwendete Handler UeberweisungHandler ist in Listing 3.10 dargestellt. Der Überweisungs-Handler besteht zum größten Teil aus der Methode ueberweisen(). Der Rest sind die Properties mit Gettern und Settern. Wir verzichten auf eine Komplettdarstellung des Handlers. Listing 3.10: Methode ueberweisen() der Klasse UeberweisungHandler public String ueberweisen () { try { Konto ziel = new KontoDAO (). getkontobyid ( kontonummer ); Transaktionslog t1 = new Transaktionslog (); t1. setart ( E ); t1. setbetrag ( betrag ); t1. settext ( verwendungszweck ); t1. setdatum ( new Date ()); ziel. addtransaktion (t1 ); ziel. setkontostand ( ziel. getkontostand (). add ( betrag )); Transaktionslog t2 = new Transaktionslog (); t2. setart ( A ); t2. setbetrag ( betrag ); t2. settext ( verwendungszweck ); t2. setdatum ( new Date ()); konto. addtransaktion (t2 ); konto. setkontostand ( konto. getkontostand (). subtract ( betrag )); new DAO (). saveorupdate ( ziel ); new DAO (). saveorupdate ( konto ); return " success "; catch ( ObjectNotFoundException e) { return " unbekanntes Konto ";
21 40 3 Der Anwendungsprototyp Beim Aufruf dieser Methode stehen in den Instanzvariablen kontonummer, betrag und verwendungszweck die Eingaben der Seite. Der Java-geübte Leser wird die Methode problemlos verstehen können. Im Transaktionslog wird zwischen Ein- und Auszahlungen durch die Art-Angaben E und A unterschieden. Das als OR-Mapper verwendete Hibernate wirft eine ObjectNotFound- Exception, falls das Konto des Empfängers nicht existiert. Ganz analog zur Navigationsregel in Listing 3.3 auf Seite 28 erfolgt hier die Anzeige einer Fehlermeldung. Wir verzichten daher auf die Darstellung der Navigationsregel und der JSF-Seite für die Fehlermeldung Kontenübersicht Als Kunde der JSF-Bank wird man in der Regel mehrere Konten besitzen, z. B. ein Giro-, ein Spar- und ein Festgeldkonto. Unser Business-Modell in Abbildung 3.2 auf Seite 24 sieht Giro- und Sparkonten vor. Der Anwendungsfall Anzeige der Kurzinformationen zu allen Konten ist recht einfach und besteht aus der Anzeige der Kontoart, der Kontonummer und des aktuellen Kontostands. Abbildung 3.8 zeigt die Darstellung im Browser. Abbildung 3.8: Kontenübersicht Anwendungen besitzen häufig eine Anzeigemöglichkeit für a priori unbekannt viele Datensätze. Bei der Kontenübersicht kann ein Kunde ein Konto, ein anderer Kunde 20 Konten besitzen. JavaServer Faces besitzen das <h:datatable>- Tag, mit dem die spaltenweise Darstellung beliebig vieler Zeilen möglich ist.
22 3.4 Realisierung 41 Listing 3.11 zeigt die Datentabelle der Kontenübersicht-Seite. Auf die Anzeige der Kundendaten oberhalb der Kontenübersicht verzichten wir. Listing 3.11: Datentabelle der Kontenübersicht 1 < h:datatable id=" data " style =" width: 100% " 2 styleclass =" standardtable " 3 headerclass =" standardtable_ Header " 4 rowclasses =" standardtable_ Row1, standardtable_ Row2 " 5 columnclasses =" standardtable_ ColumnCentered " 6 var =" konto " value ="#{ kundenhandler. konten "> 7 < h:column > 8 < f:facet name =" header "> 9 < h: outputtext value =" Kontoart " / > 10 </ f:facet > 11 < h:outputtext value ="#{ konto. class. simplename " /> 12 </ h:column > 13 < h:column > 14 < f:facet name =" header "> 15 < h: outputtext value =" Kontonummer " / > 16 </ f:facet > 17 < h:outputtext value ="#{ konto.id" /> 18 </ h:column > 19 < h:column > 20 < f:facet name =" header "> 21 < h: outputtext value =" Kontostand " / > 22 </ f:facet > 23 < h:outputtext value ="#{ konto. kontostand " /> 24 </ h:column > 25 </ h: datatable > Das <h:datatable>-tag besitzt zwei Attribute, die für die Iteration über die Daten benötigt werden. Das Attribut value (im Listing in Zeile 6) ist eine Wertebindung, die eine Referenz auf ein List-Objekt oder ein Array liefern muss. Möglich sind auch JDBC-ResultSets, JSTL-ResultSets und andere Objekte. Das Attribut var (ebenfalls Zeile 6) deklariert einen Bezeichner, der analog zu einem Iterator des Collection-Frameworks über die Daten iteriert. Dieser Iterator wird innerhalb der Spalten wiederum in Wertebindungen über Getter zugegriffen. Die Tabelle der Kontenübersicht besteht aus drei Spalten (<h:column>-tag) mit den Überschriften (<f:facet>-tag mit Attribut name="header") Kontoart, Kontonummer und Kontostand. Der Zeilenwert einer jeden Spalte wird durch das <h:outputtext>-tag belegt. In der Spalte Kontoart ist dies konto.class.simplename, ein JSF-EL-Ausdruck, der dem Java-Ausdruck konto.getclass().getsimplename() entspricht. Die Metho-
23 42 3 Der Anwendungsprototyp de Class.getSimpleName() gibt den Namen der Klasse ohne Package-Präfix zurück. Die Methode wurde in Java 5.0 dem Class-API hinzugefügt. Die Spalte Kontonummer enthält die Id eines Kontos. Dieses Attribut ist im UML- Klassendiagramm in Abbildung 3.2 nicht enthalten, da es als Implementierungsdetail des OR-Mappers in alle Java-Klassen aufgenommen werden muss, die persistent gemacht werden sollen und nicht zur Fachlichkeit gehört. Das Attribut entspricht dem Primärschlüssel der Datenbank. Die Spalte Kontostand enthält schließlich den Wert des Properties kontostand. Der komplette Quell-Code der Seite ist über die Web-Site des Buches zu erhalten Umsatzanzeige Der letzte Anwendungsfall ist die Anzeige der Umsätze. Für ein auszuwählendes Konto werden die Umsätze tabellarisch angezeigt. Im Prototyp werden alle Umsätze angezeigt, die produktive Anwendung wird Möglichkeiten zur Selektion von Umsätzen anbieten. Abbildung 3.9 zeigt die Darstellung im Browser. Die Seite enthält auf den ersten Blick nur bekannte Elemente: eine Drop-down- Auswahl, eine Schaltfläche und eine Tabelle. Trotzdem lohnt ein Blick in den Quell-Code. Listing 3.12 zeigt den interessanten Teil der JSF-Seite. Abbildung 3.9: Umsatzanzeige
24 3.4 Realisierung 43 Listing 3.12: Ausschnitt der JSF-Seite Umsatzanzeige 1 < h: panelgrid columns =" 3" styleclass =" bordertable " 2 style =" width: 100%; " > 3 < h: outputtext value =" Konto: " / > 4 < h: selectonemenu id =" selectonemenukonto " 5 value ="#{ umsatzanzeigehandler. konto " 6 converter =" KontoConverter " > 7 < f: selectitems value ="#{ kundenhandler. kontenitems " / > 8 </ h: selectonemenu > 9 < h: commandbutton value =" Aktualisieren " 10 action ="#{ umsatzanzeigehandler. aktualisieren "/ > 11 </ h: panelgrid > 12 < h: datatable id =" data " style =" width: 100%; " 13 styleclass =" standardtable " 14 headerclass =" standardtable_ Header " 15 rowclasses =" standardtable_ Row1, standardtable_ Row2 " 16 columnclasses =" standardtable_ Column " 17 var =" transaktion " 18 value ="#{ umsatzanzeigehandler. transaktionen " > 19 < h:column > 20 < f:facet name =" header "> 21 < h: outputtext value =" Buchungsdatum " / > 22 </ f:facet > 23 < h:outputtext value ="#{ transaktion. datum "> 24 < f:convertdatetime pattern ="dd.mm. yyyy " /> 25 </ h: outputtext > 26 </ h:column > Das <h:selectonemenu>-tag in den Zeilen 3 bis 7 zeigt alle Konten des Kunden an und ist identisch mit der Überweisungs-Seite (Listing 3.7 auf Seite 36) mit Ausnahme des value-attributs. Dies wird hier an das Property konto des Umsatzanzeige-Handlers gebunden. Die in Zeile 11 beginnende Datentabelle ist ähnlich der Datentabelle der Kontenübersicht aufgebaut. Interessant ist hier das Property transaktionen des Umsatzanzeige-Handlers. Wir schauen uns dieses Property nun genauer an. Listing 3.13 zeigt einen Ausschnitt der Klasse UmsatzanzeigeHandler. Listing 3.13: Ausschnitt der Klasse UmsatzanzeigeHandler public class UmsatzanzeigeHandler { private Konto konto ; // Konto des SelectOneMenu public List gettransaktionen () { if ( konto!= null ) {
25 44 3 Der Anwendungsprototyp new DAO (). saveorupdate ( konto ); // an Session binden return new ArrayList ( konto. gettransaktionen ()); return null ; public String aktualisieren () { return " success ";... Die Methode gettransaktionen(), die in der JSF-Seite als Datenquelle verwendet wird, gibt die Liste aller Transaktionslog-Einträge des ausgewählten Kontos zurück. Zunächst wird die Variable konto wieder mit der aktuellen Hibernate-Session verbunden, da das konto-objekt zum Zeitpunkt des Methodenaufrufs mit keiner Session verbunden ist. Eine ausführliche Darstellung und Begründung des Vorgehens erfolgt in Abschnitt 6.4. Im Augenblick konzentrieren wir uns auf die Fertigstellung unseres Prototyps. Die Methode gettransaktionen() der Klasse Konto gibt ein java.util.set zurück, die Methode verlangt aber einen Rückgabewert vom Typ List. Dies lässt sich am einfachsten durch einen Wrapper der Klasse ArrayList realisieren. Die als Action-Methode der Schaltfläche verwendete Methode aktualisieren() besteht lediglich aus der Rückgabe der Konstanten "success". Welche Funktion wird durch diese Methode erfüllt? Wählt der Benutzer in der Dropdown-Liste ein Konto aus und betätigt die Schaltfläche, so wird vor Aufruf der Methode aktualisieren() das in der Drop-down-Liste aktuell selektierte Konto der Variablen konto zugewiesen. Zur neuen Darstellung der Datentabelle wird die Methode gettransaktionen() aufgerufen, und zwar für das neu ausgewählte Konto. Damit ist die Methode aktualisieren() nur eine Placebo-Methode ohne eigentliche Aufgabe. Die explizite Betätigung der Schaltfläche nach der Auswahl eines Kontos ist nicht sehr benutzerfreundlich und im Prinzip unnötig. Wir werden dieses Manko in Kapitel 6 beseitigen. In diesem Kapitel haben wir den Prototypen unseres Online-Bankings erstellt. Die typische Struktur einer JSF-basierten Anwendung wurde vorgestellt, und wir haben einige Details einer solchen Anwendung auch realisiert. Viele Fragen bleiben allerdings auch offen. Im folgenden Kapitel wird die Struktur und Funktionsweise einer JSF-Implementierung ausführlich dargestellt, um diese Fragen zu beantworten.
26 3.4 Realisierung 45 Aufgabe 3.1 Der JSF-EL-Ausdruck "#{umsatzanzeigehandler.aktualisieren" gibt die Konstante "success" zurück, die allerdings in keiner Navigationsregel verwendet wird. Die Konstante selbst ist ebenfalls ein Ausdruck und kann auch direkt verwendet werden. Ändern Sie die JSF-Seite so ab, dass als Wert des action-attributs der Schaltfläche die String-Konstante steht, und überzeugen Sie sich von der korrekten Funktion.
Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...
PIWIN I Kap. 8 Objektorientierte Programmierung - Vererbung 31 Schlüsselwort: final Verhindert, dass eine Methode überschrieben wird public final int holekontostand() {... Erben von einer Klasse verbieten:
MehrOnline Banking System
Online Banking System Pflichtenheft im Rahmen des WI-Praktikum bei Thomas M. Lange Fachhochschule Giessen-Friedberg Fachbereich MNI Studiengang Informatik Erstellt von: Eugen Riske Yueksel Korkmaz Alper
Mehr5.2 Neue Projekte erstellen
5.2 Neue Projekte erstellen Das Bearbeiten von bestehenden Projekten und Objekten ist ja nicht schlecht wie aber können Sie neue Objekte hinzufügen oder gar völlig neue Projekte erstellen? Die Antwort
MehrAnleitung BFV-Widget-Generator
Anleitung BFV-Widget-Generator Seite 1 von 6 Seit dem 1. Oktober 2014 hat der Bayerische Fußball-Verband e.v. neue Widgets und einen neuen Baukasten zur Erstellung dieser Widgets veröffentlicht. Im Folgenden
MehrObjektorientierte Programmierung
Objektorientierte Programmierung 1 Geschichte Dahl, Nygaard: Simula 67 (Algol 60 + Objektorientierung) Kay et al.: Smalltalk (erste rein-objektorientierte Sprache) Object Pascal, Objective C, C++ (wiederum
MehrWenn Sie das T-Online WebBanking das erste Mal nutzen, müssen Sie sich zunächst für den Dienst Mobiles Banking frei schalten lassen.
1 PIN/TAN-T-Online-WebBanking mit moneyplex Bis auf wenige Ausnahmen bieten heute fast alle Kreditinstitute modernes und hoch sicheres HBCI-Internetbanking an. Um mit nicht HBCI-fähigen Banken trotzdem
MehrEinführung in die Programmierung
Technische Universität München WS 2003/2004 Institut für Informatik Prof. Dr. Christoph Zenger Testklausur Einführung in die Programmierung Probeklausur Java (Lösungsvorschlag) 1 Die Klasse ArrayList In
MehrAufklappelemente anlegen
Aufklappelemente anlegen Dieses Dokument beschreibt die grundsätzliche Erstellung der Aufklappelemente in der mittleren und rechten Spalte. Login Melden Sie sich an der jeweiligen Website an, in dem Sie
Mehretermin Einbindung in Outlook
etermin Einbindung in Outlook 1. Einführung Über etermin gebuchte Termine können bei Bedarf auch mit externen Terminkalendern, wie zum Beispiel Outlook, ical oder Google synchronisiert werden. Dieses Dokument
MehrEinstellungen für SEPA-Lastschriften in der VR-NetWorld-Software
Einstellungen für SEPA-Lastschriften in der VR-NetWorld-Software Um in der VR-NetWorld-Software SEPA-Lastschriften einziehen zu können, müssen Sie folgende Einstellungen treffen: 1. SEPA-Lastschriften
MehrEinstellungen für SEPA-Lastschriften oder SEPA Dauerlastschriften in der VR-NetWorld Software 5.0
Einstellungen für SEPA-Lastschriften oder SEPA Dauerlastschriften in der VR-NetWorld Software 5.0 Bitte beachten Sie diese Punkte wenn Sie in der VR-NetWorld Software 5.0 Lastschriften oder Dauerlastschriften
MehrSuche schlecht beschriftete Bilder mit Eigenen Abfragen
Suche schlecht beschriftete Bilder mit Eigenen Abfragen Ist die Bilderdatenbank über einen längeren Zeitraum in Benutzung, so steigt die Wahrscheinlichkeit für schlecht beschriftete Bilder 1. Insbesondere
MehrKapitel I: Registrierung im Portal
Kapitel I: Registrierung im Portal Um zu unserem Portal zu gelangen, rufen Sie bitte die folgende Internetseite auf: www.arag-forderungsmanagement.de Bei Ihrem ersten Besuch des ARAG Portals ist es notwendig,
MehrDatenbank-Verschlüsselung mit DbDefence und Webanwendungen.
Datenbank-Verschlüsselung mit DbDefence und Webanwendungen. In diesem Artikel werden wir Ihnen zeigen, wie Sie eine Datenbank verschlüsseln können, um den Zugriff einzuschränken, aber trotzdem noch eine
MehrDie Beschreibung bezieht sich auf die Version Dreamweaver 4.0. In der Version MX ist die Sitedefinition leicht geändert worden.
In einer Website haben Seiten oft das gleiche Layout. Speziell beim Einsatz von Tabellen, in denen die Navigation auf der linken oder rechten Seite, oben oder unten eingesetzt wird. Diese Anteile der Website
Mehr5 Zweisprachige Seiten
5 Zweisprachige Seiten TYPO3 unterstützt mehrsprachige Web-Sites. Hier zeigen wir Ihnen die Funktion an Hand einer zweisprachigen Web-Site. Bei drei oder mehr Sprachen gehen Sie analog vor. Jede Seite
MehrEinführung in die Java- Programmierung
Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger horn@uni-koblenz.de WiSe 2012/13 1 Wichtig... Mittags keine Pommes... Praktikum A 230 C 207 (Madeleine + Esma) F 112 F 113
MehrSichtbarkeit & statische Methoden. Einsatz von Sichtbarkeit Einsatz statischer Methoden programmatische Realisierung 2 Beispielaufgaben
Sichtbarkeit & statische Methoden Einsatz von Sichtbarkeit Einsatz statischer Methoden programmatische Realisierung 2 Beispielaufgaben Nicht sichtbare Methoden Wollen Eltern bestimmte Methoden vor den
MehrHilfedatei der Oden$-Börse Stand Juni 2014
Hilfedatei der Oden$-Börse Stand Juni 2014 Inhalt 1. Einleitung... 2 2. Die Anmeldung... 2 2.1 Die Erstregistrierung... 3 2.2 Die Mitgliedsnummer anfordern... 4 3. Die Funktionen für Nutzer... 5 3.1 Arbeiten
MehrHandbuch ECDL 2003 Basic Modul 5: Datenbank Grundlagen von relationalen Datenbanken
Handbuch ECDL 2003 Basic Modul 5: Datenbank Grundlagen von relationalen Datenbanken Dateiname: ecdl5_01_00_documentation_standard.doc Speicherdatum: 14.02.2005 ECDL 2003 Basic Modul 5 Datenbank - Grundlagen
MehrSession Beans & Servlet Integration. Ralf Gitzel ralf_gitzel@hotmail.de
s & Servlet Integration Ralf Gitzel ralf_gitzel@hotmail.de 1 Themenübersicht Ralf Gitzel ralf_gitzel@hotmail.de 2 Übersicht Motivation Das Interface Stateful und Stateless s Programmierung einer Stateful
MehrInhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER
AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER Inhalt 1 Einleitung... 1 2 Einrichtung der Aufgabe für die automatische Sicherung... 2 2.1 Die Aufgabenplanung... 2 2.2 Der erste Testlauf... 9 3 Problembehebung...
MehrJava: Vererbung. Teil 3: super() www.informatikzentrale.de
Java: Vererbung Teil 3: super() Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und IMMER zuerst den Konstruktor der Elternklasse auf! Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und
MehrIn diesem Thema lernen wir die Grundlagen der Datenbanken kennen und werden diese lernen einzusetzen. Access. Die Grundlagen der Datenbanken.
In diesem Thema lernen wir die Grundlagen der Datenbanken kennen und werden diese lernen einzusetzen. Access Die Grundlagen der Datenbanken kurspc15 Inhaltsverzeichnis Access... Fehler! Textmarke nicht
MehrE-Mail-Inhalte an cobra übergeben
E-Mail-Inhalte an cobra übergeben Sie bieten ihren potentiellen oder schon bestehenden Kunden über ihre Website die Möglichkeit, per Bestellformular verschiedene Infomaterialien in Papierform abzurufen?
MehrKostenstellen verwalten. Tipps & Tricks
Tipps & Tricks INHALT SEITE 1.1 Kostenstellen erstellen 3 13 1.3 Zugriffsberechtigungen überprüfen 30 2 1.1 Kostenstellen erstellen Mein Profil 3 1.1 Kostenstellen erstellen Kostenstelle(n) verwalten 4
Mehrmysql - Clients MySQL - Abfragen eine serverbasierenden Datenbank
mysql - Clients MySQL - Abfragen eine serverbasierenden Datenbank In den ersten beiden Abschnitten (rbanken1.pdf und rbanken2.pdf) haben wir uns mit am Ende mysql beschäftigt und kennengelernt, wie man
MehrIhre Interessentendatensätze bei inobroker. 1. Interessentendatensätze
Ihre Interessentendatensätze bei inobroker Wenn Sie oder Ihre Kunden die Prozesse von inobroker nutzen, werden Interessentendatensätze erzeugt. Diese können Sie direkt über inobroker bearbeiten oder mit
MehrNovell Client. Anleitung. zur Verfügung gestellt durch: ZID Dezentrale Systeme. Februar 2015. ZID Dezentrale Systeme
Novell Client Anleitung zur Verfügung gestellt durch: ZID Dezentrale Systeme Februar 2015 Seite 2 von 8 Mit der Einführung von Windows 7 hat sich die Novell-Anmeldung sehr stark verändert. Der Novell Client
MehrAnleitung Modul freie Plätze VAKA heiminfo.ch
Anleitung Modul freie Plätze VAKA heiminfo.ch Version: 1.0 / Januar 2010 1. Einleitung... 1 2. Login Verwaltungsbereich... 2 3. Allgemeine Anleitung... 3 4. Allgemeine Funktionen... 4 Speichern / Abbrechen...
MehrProgrammieren in Java
Programmieren in Java objektorientierte Programmierung 2 2 Zusammenhang Klasse-Datei In jeder *.java Datei kann es genau eine public-klasse geben wobei Klassen- und Dateiname übereinstimmen. Es können
MehrAnmeldung bei einem registrierten Konto (Account)
Anmeldung bei einem registrierten Konto (Account) Aufrufen des Anmeldefensters Geben sie in die Adresszeile ihres Internet-Browsers die Adresse (http://www.quid4bid.com) ein. Sie können entweder auf die
MehrEs wird das Struts <html:option> Element erläutert und anhand von kleinen Beispielen der Umgang veranschaulicht.
Struts Code Peaces Element Es wird das Struts Element erläutert und anhand von kleinen Beispielen der Umgang veranschaulicht. Allgemeines Autor: Sascha Wolski Sebastian Hennebrüder
MehrVR-NetWorld Software Einrichtung einer Bankverbindung PIN/TAN-Verfahren
VR-NetWorld Software Einrichtung einer Bankverbindung PIN/TAN-Verfahren Sehr geehrte Kundin, sehr geehrter Kunde, bitte benutzen Sie zur Einrichtung einer Bankverbindung mit dem PIN/TAN-Verfahren die in
MehrJSF Erstellen einer einfachen Bankanwendung mit Kontoübersicht und Überweisung
Universität Bayreuth Lehrstuhl für Angewandte Informatik IV Datenbanken und Informationssysteme Prof. Dr.-Ing. Jablonski JSF Erstellen einer einfachen Bankanwendung mit Kontoübersicht und Überweisung Dipl.
MehrAnleitungen zum KMG-Email-Konto
In dieser Anleitung erfahren Sie, wie Sie mit einem Browser (Firefox etc.) auf das Email-Konto zugreifen; Ihr Kennwort ändern; eine Weiterleitung zu einer privaten Email-Adresse einrichten; Ihr Email-Konto
MehrObjektorientierte Programmierung
Universität der Bundeswehr Fakultät für Informatik Institut 2 Priv.-Doz. Dr. Lothar Schmitz FT 2006 Zusatzaufgaben Lösungsvorschlag Objektorientierte Programmierung Lösung 22 (Java und UML-Klassendiagramm)
MehrKurzanleitung fu r Clubbeauftragte zur Pflege der Mitgliederdaten im Mitgliederbereich
Kurzanleitung fu r Clubbeauftragte zur Pflege der Mitgliederdaten im Mitgliederbereich Mitgliederbereich (Version 1.0) Bitte loggen Sie sich in den Mitgliederbereich mit den Ihnen bekannten Zugangsdaten
MehrEinrichten eines Postfachs mit Outlook Express / Outlook bis Version 2000
Folgende Anleitung beschreibt, wie Sie ein bestehendes Postfach in Outlook Express, bzw. Microsoft Outlook bis Version 2000 einrichten können. 1. Öffnen Sie im Menü die Punkte Extras und anschließend Konten
MehrSEP 114. Design by Contract
Design by Contract SEP 114 Design by Contract Teile das zu entwickelnde Programm in kleine Einheiten (Klassen, Methoden), die unabhängig voneinander entwickelt und überprüft werden können. Einheiten mit
MehrOP-LOG www.op-log.de
Verwendung von Microsoft SQL Server, Seite 1/18 OP-LOG www.op-log.de Anleitung: Verwendung von Microsoft SQL Server 2005 Stand Mai 2010 1 Ich-lese-keine-Anleitungen 'Verwendung von Microsoft SQL Server
MehrKleines Handbuch zur Fotogalerie der Pixel AG
1 1. Anmelden an der Galerie Um mit der Galerie arbeiten zu können muss man sich zuerst anmelden. Aufrufen der Galerie entweder über die Homepage (www.pixel-ag-bottwartal.de) oder über den direkten Link
MehrMCRServlet Table of contents
Table of contents 1 Das Zusammenspiel der Servlets mit dem MCRServlet... 2 1 Das Zusammenspiel der Servlets mit dem MCRServlet Als übergeordnetes Servlet mit einigen grundlegenden Funktionalitäten dient
Mehrecaros2 - Accountmanager
ecaros2 - Accountmanager procar informatik AG 1 Stand: FS 09/2012 Inhaltsverzeichnis 1 Aufruf des ecaros2-accountmanager...3 2 Bedienung Accountmanager...4 procar informatik AG 2 Stand: FS 09/2012 1 Aufruf
MehrRegistrierung im Portal (Personenförderung)
Registrierung im Portal (Personenförderung) Zweck Um das DAAD-Portal zu nutzen und z.b. eine Bewerbung einzureichen, müssen Sie sich zuerst registrieren. Mit der Registrierung machen Sie sich einmalig
MehrDrei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI
Universität Osnabrück Drei-Schichten-Architektur 3 - Objektorientierte Programmierung in Java Vorlesung 6: 3-Schichten-Architektur Fachkonzept - GUI SS 2005 Prof. Dr. F.M. Thiesing, FH Dortmund Ein großer
MehrDer lokale und verteilte Fall
Lokale Beans Der lokale und verteilte Fall RemoteClient Lokaler Client (JSP) RemoteSession/Entity-Bean Lokale Session/Entity-Bean 2 Lokale Beans Die bisher vorgestellten EJBswaren immer in der Lage auf
MehrAccess 2010. Grundlagen für Anwender. Andrea Weikert 1. Ausgabe, 1. Aktualisierung, Juli 2012. inkl. zusätzlichem Übungsanhang ACC2010-UA
Andrea Weikert 1. Ausgabe, 1. Aktualisierung, Juli 2012 Access 2010 Grundlagen für Anwender inkl. zusätzlichem Übungsanhang ACC2010-UA 3 Access 2010 - Grundlagen für Anwender 3 Daten in Formularen bearbeiten
MehrIhr CMS für die eigene Facebook Page - 1
Ihr CMS für die eigene Facebook Page Installation und Einrichten eines CMS für die Betreuung einer oder mehrer zusätzlichen Seiten auf Ihrer Facebook Page. Anpassen der "index.php" Installieren Sie das
MehrEinrichtung Email-Account
Einrichtung Email-Account Stand: 25. März 2004 Software Company www.business.co.at, office@business.co.at Software Company - 25.03.2004 1 Inhaltsverzeichnis EINRICHTUNG OUTLOOK EXPRESS...3 WEBMAIL & VACATION...8
MehrEinstellungen im Internet-Explorer (IE) (Stand 11/2013) für die Arbeit mit IOS2000 und DIALOG
Einstellungen im Internet-Explorer (IE) (Stand 11/2013) für die Arbeit mit IOS2000 und DIALOG Um mit IOS2000/DIALOG arbeiten zu können, benötigen Sie einen Webbrowser. Zurzeit unterstützen wir ausschließlich
MehrDiese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress.
Anmeldung http://www.ihredomain.de/wp-admin Dashboard Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress. Das Dashboard gibt Ihnen eine kurze Übersicht, z.b. Anzahl der Beiträge,
MehrEnigmail Konfiguration
Enigmail Konfiguration 11.06.2006 Steffen.Teubner@Arcor.de Enigmail ist in der Grundkonfiguration so eingestellt, dass alles funktioniert ohne weitere Einstellungen vornehmen zu müssen. Für alle, die es
MehrNTT DATA Helpdesk Benutzerhandbuch
NTT DATA Helpdesk Benutzerhandbuch Inhaltsverzeichnis 1 Login... 2 2 Helpdesk... 3 2.1 Homepage... 3 2.1.1 Ticketauswahl... 4 2.1.2 Tabellenvoreinstellungen... 4 2.1.3 Berichte, Auswahl der Einträge in
MehrEs sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.
Schritt 1: Installation des Javacompilers JDK. Der erste Start mit Eclipse Bevor Sie den Java-Compiler installieren sollten Sie sich vergewissern, ob er eventuell schon installiert ist. Gehen sie wie folgt
MehrPrimzahlen und RSA-Verschlüsselung
Primzahlen und RSA-Verschlüsselung Michael Fütterer und Jonathan Zachhuber 1 Einiges zu Primzahlen Ein paar Definitionen: Wir bezeichnen mit Z die Menge der positiven und negativen ganzen Zahlen, also
MehrSoftware Engineering Klassendiagramme Assoziationen
Software Engineering Klassendiagramme Assoziationen Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Lesen von Multiplizitäten (1) Multiplizitäten werden folgendermaßen
MehrHow to do? Projekte - Zeiterfassung
How to do? Projekte - Zeiterfassung Stand: Version 4.0.1, 18.03.2009 1. EINLEITUNG...3 2. PROJEKTE UND STAMMDATEN...4 2.1 Projekte... 4 2.2 Projektmitarbeiter... 5 2.3 Tätigkeiten... 6 2.4 Unterprojekte...
Mehrmobile TAN Umstellungsanleitung Star Money
mobile TAN Umstellungsanleitung Star Money INHALTSVERZEICHNIS 1 Sicherheitshinweise... 3 2 Schritt 1 die Anmeldung... 4 3 Schritt 2 die Freischaltung... 5 4 Schritt 3 die Umstellung in Star Money... 6
MehrEigene Seiten erstellen
PhPepperShop Anleitung Datum: 3. Oktober 2013 Version: 2.1 Eigene Seiten erstellen Eigene Inhalte / CMS Glarotech GmbH Inhaltsverzeichnis Anleitung zur Erstellung von eigenen Inhalten/Links...3 1. Anmeldung
MehrFacebook I-Frame Tabs mit Papoo Plugin erstellen und verwalten
Facebook I-Frame Tabs mit Papoo Plugin erstellen und verwalten Seit Anfang Juni 2012 hat Facebook die Static FBML Reiter deaktiviert, so wird es relativ schwierig für Firmenseiten eigene Impressumsreiter
MehrTevalo Handbuch v 1.1 vom 10.11.2011
Tevalo Handbuch v 1.1 vom 10.11.2011 Inhalt Registrierung... 3 Kennwort vergessen... 3 Startseite nach dem Login... 4 Umfrage erstellen... 4 Fragebogen Vorschau... 7 Umfrage fertigstellen... 7 Öffentliche
Mehr5 Projekt Bankverwaltung
Kapitel 5 Bankverwaltung (Lösung) Seite 1/7 5 Projekt Bankverwaltung 5.1 Festlegen der Schnittstelle Bevor du mit der Programmierung beginnst, musst du dir einige Gedanken über die Schnittstelle zwischen
Mehrrobotron*e count robotron*e sales robotron*e collect Anmeldung Webkomponente Anwenderdokumentation Version: 2.0 Stand: 28.05.2014
robotron*e count robotron*e sales robotron*e collect Anwenderdokumentation Version: 2.0 Stand: 28.05.2014 Seite 2 von 5 Alle Rechte dieser Dokumentation unterliegen dem deutschen Urheberrecht. Die Vervielfältigung,
MehrBüroWARE Exchange Synchronisation Grundlagen und Voraussetzungen
BüroWARE Exchange Synchronisation Grundlagen und Voraussetzungen Stand: 13.12.2010 Die BüroWARE SoftENGINE ist ab Version 5.42.000-060 in der Lage mit einem Microsoft Exchange Server ab Version 2007 SP1
MehrClientkonfiguration für Hosted Exchange 2010
Clientkonfiguration für Hosted Exchange 2010 Vertraulichkeitsklausel Das vorliegende Dokument beinhaltet vertrauliche Informationen und darf nicht an Dritte weitergegeben werden. Kontakt: EveryWare AG
MehrOutLook 2003 Konfiguration
OutLook 2003 Konfiguration Version: V0.1 Datum: 16.10.06 Ablage: ftp://ftp.clinch.ch/doku/outlook2003.pdf Autor: Manuel Magnin Änderungen: 16.10.06 MM.. Inhaltsverzeichnis: 1. OutLook 2003 Konfiguration
MehrAutoresponder Unlimited 2.0
Anleitung zur Installation und Anwendung Autoresponder Unlimited 2.0 Anleitung zur Installation und Anwendung Wie Ihr Autoresponder Unlimited 2.0 funktioniert Den Autoresponder Unlimited 2.0 installieren
MehrErstellen einer digitalen Signatur für Adobe-Formulare
Erstellen einer digitalen Signatur für Adobe-Formulare (Hubert Straub 24.07.13) Die beiden Probleme beim Versenden digitaler Dokumente sind einmal die Prüfung der Authentizität des Absenders (was meist
MehrGuide DynDNS und Portforwarding
Guide DynDNS und Portforwarding Allgemein Um Geräte im lokalen Netzwerk von überall aus über das Internet erreichen zu können, kommt man um die Themen Dynamik DNS (kurz DynDNS) und Portweiterleitung(auch
MehrProfessionelle Seminare im Bereich MS-Office
Der Name BEREICH.VERSCHIEBEN() ist etwas unglücklich gewählt. Man kann mit der Funktion Bereiche zwar verschieben, man kann Bereiche aber auch verkleinern oder vergrößern. Besser wäre es, die Funktion
MehrInstallationsanleitung CLX.PayMaker Home
Installationsanleitung CLX.PayMaker Home Inhaltsverzeichnis 1. Installation und Datenübernahme... 2 2. Erste Schritte Verbindung zur Bank einrichten und Kontoinformationen beziehen... 4 3. Einrichtung
MehrBiogena IMK. Individuelle Mikronährstoff Komponenten. Benutzerhandbuch. Natürlich so individuell wie Ihr Patient
Biogena IMK Individuelle Mikronährstoff Komponenten Benutzerhandbuch Natürlich so individuell wie Ihr Patient 1. Anmeldung 1.1. Einloggen bei Biogena IMK Geben Sie Ihre persönlichen Login Daten, die Sie
MehrLineargleichungssysteme: Additions-/ Subtraktionsverfahren
Lineargleichungssysteme: Additions-/ Subtraktionsverfahren W. Kippels 22. Februar 2014 Inhaltsverzeichnis 1 Einleitung 2 2 Lineargleichungssysteme zweiten Grades 2 3 Lineargleichungssysteme höheren als
MehrStellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster
Es gibt in Excel unter anderem die so genannten Suchfunktionen / Matrixfunktionen Damit können Sie Werte innerhalb eines bestimmten Bereichs suchen. Als Beispiel möchte ich die Funktion Sverweis zeigen.
Mehrhttp://train-the-trainer.fh-joanneum.at IINFO Storyboard
IINFO Storyboard Allgemeine Bemerkungen und Richtlinien zur Handhabung. Das Storyboard besteht aus einem Web, d.h. einer vernetzten Struktur von HTML-Seiten welche später von den Programmieren direkt als
MehrJSP Grundlagen. JEE Vorlesung Teil 5. Ralf Gitzel ralf_gitzel@hotmail.de
JSP Grundlagen JEE Vorlesung Teil 5 Ralf Gitzel ralf_gitzel@hotmail.de 1 Übersicht Ralf Gitzel ralf_gitzel@hotmail.de 2 Übersicht JSP Konzept Model-View-Controller mit JSPs JSP Expression Language EL Literale
MehrDurchführung der Datenübernahme nach Reisekosten 2011
Durchführung der Datenübernahme nach Reisekosten 2011 1. Starten Sie QuickSteuer Deluxe 2010. Rufen Sie anschließend über den Menüpunkt /Extras/Reisekosten Rechner den QuickSteuer Deluxe 2010 Reisekosten-Rechner,
MehrGrafstat Checkliste Internetbefragung
Grafstat Checkliste Internetbefragung ( A ) Datensammelpunkt im Formular eintragen ( B ) Befragung auf dem Datensammelpunkt anmelden ( C ) Formular ins Internet stellen (z.b. Homepage) ( D ) Befragung
MehrKurzanweisung für Google Analytics
Kurzanweisung für Google Analytics 1. Neues Profil für eine zu trackende Webseite erstellen Nach dem Anmelden klicken Sie rechts oben auf den Button Verwaltung : Daraufhin erscheint die Kontoliste. Klicken
MehrFlashfragen in ILIAS Test & Assessment. Helmut Schottmüller
Flashfragen in ILIAS Test & Assessment Helmut Schottmüller Flashfragen in ILIAS Test & Assessment Helmut Schottmüller Veröffentlicht Januar 2009 Copyright 2009 Helmut Schottmüller Inhaltsverzeichnis 1.
MehrAlle alltäglichen Aufgaben können auch über das Frontend durchgeführt werden, das in den anderen Anleitungen erläutert wird.
Der Admin-Bereich im Backend Achtung: Diese Anleitung gibt nur einen groben Überblick über die häufigsten Aufgaben im Backend-Bereich. Sollten Sie sich nicht sicher sein, was genau Sie gerade tun, dann
MehrHTML5. Wie funktioniert HTML5? Tags: Attribute:
HTML5 HTML bedeutet Hypertext Markup Language und liegt aktuell in der fünften Fassung, also HTML5 vor. HTML5 ist eine Auszeichnungssprache mit der Webseiten geschrieben werden. In HTML5 wird festgelegt,
MehrObjektbasierte Entwicklung
Embedded Software Objektbasierte Entwicklung Objektorientierung in C? Prof. Dr. Nikolaus Wulff Objektbasiert entwickeln Ohne C++ wird meist C im alten Stil programmiert. => Ein endlose while-schleife mit
MehrWeb-Kürzel. Krishna Tateneni Yves Arrouye Deutsche Übersetzung: Stefan Winter
Krishna Tateneni Yves Arrouye Deutsche Übersetzung: Stefan Winter 2 Inhaltsverzeichnis 1 Web-Kürzel 4 1.1 Einführung.......................................... 4 1.2 Web-Kürzel.........................................
MehrKapitel 4 Die Datenbank Kuchenbestellung Seite 1
Kapitel 4 Die Datenbank Kuchenbestellung Seite 1 4 Die Datenbank Kuchenbestellung In diesem Kapitel werde ich die Theorie aus Kapitel 2 Die Datenbank Buchausleihe an Hand einer weiteren Datenbank Kuchenbestellung
MehrSQL - Übungen Bearbeitung der Datenbank Personal (1)
Bearbeitung der Datenbank Personal (1) 1. Abfragen einer einzigen Tabelle 1.1. Zeigen Sie alle Informationen an, die über die Kinder der Mitarbeiter gespeichert sind. 1.2. Zeigen Sie aus der Tabelle stelle
MehrBedienungsanleitung: Onlineverifizierung von qualifiziert signierten PDF-Dateien
Sie haben von der VR DISKONTBANK GmbH ein signiertes PDF-Dokument (i.d.r. eine Zentralregulierungsliste mit dem Status einer offiziellen Rechnung) erhalten und möchten nun die Signatur verifizieren, um
MehrErste Schritte mit WordPress Anleitung WordPress Version 2.8.X
Erste Schritte mit WordPress Anleitung WordPress Version 2.8.X Login Rufen Sie die Login Seite auf: http://ihren-domainname.ch/wp-login.php Melden Sie sich mit dem Login an: Username Passwort Seiten Aktualisieren
MehrSerienbrief erstellen
Serienbrief erstellen Mit einem perfekt vorbereiteten Serienbrief können Sie viel Zeit sparen. In unserem Beispiel lesen wir die Daten für unseren Serienbrief aus einer Excel Tabelle aus. Die Tabelle hat
MehrKurzeinführung Excel2App. Version 1.0.0
Kurzeinführung Excel2App Version 1.0.0 Inhalt Einleitung Das Ausgangs-Excel Excel-Datei hochladen Excel-Datei konvertieren und importieren Ergebnis des Imports Spalten einfügen Fehleranalyse Import rückgängig
MehrALF-BanCo - Chipkarte einrichten in 3 Schritten
ALF-BanCo - Chipkarte einrichten in 3 Schritten 1. Schritt: Installation ALF-BanCo und Chipkartenleser Installieren Sie zunächst die aktuellste Version von ALF-BanCo Stecken Sie das Chipkartenlesegerät
Mehr4. BEZIEHUNGEN ZWISCHEN TABELLEN
4. BEZIEHUNGEN ZWISCHEN TABELLEN Zwischen Tabellen können in MS Access Beziehungen bestehen. Durch das Verwenden von Tabellen, die zueinander in Beziehung stehen, können Sie Folgendes erreichen: Die Größe
Mehr2. Die eigenen Benutzerdaten aus orgamax müssen bekannt sein
Einrichtung von orgamax-mobil Um die App orgamax Heute auf Ihrem Smartphone nutzen zu können, ist eine einmalige Einrichtung auf Ihrem orgamax Rechner (bei Einzelplatz) oder Ihrem orgamax Server (Mehrplatz)
MehrUm in das Administrationsmenü zu gelangen ruft Ihr Eure Seite auf mit dem Zusatz?mod=admin :
WebsoziCMS 2.8.9 Kurzanleitung Stand: 10.04.2008 Andreas Kesting Diese Kurzanleitung zum WebsoziCMS 2.8.9 beschränkt beschränkt sich auf die häufigsten Tätigkeiten beim Administrieren Eurer Homepage: -
MehrGeoPilot (Android) die App
GeoPilot (Android) die App Mit der neuen Rademacher GeoPilot App machen Sie Ihr Android Smartphone zum Sensor und steuern beliebige Szenen über den HomePilot. Die App beinhaltet zwei Funktionen, zum einen
MehrAnleitung zur Mailumstellung Entourage
Anleitung zur Mailumstellung Entourage (Wenn Sie Apple Mail verwenden oder mit Windows arbeiten, so laden Sie sich die entsprechenden Anleitungen, sowie die Anleitung für das WebMail unter http://www.fhnw.ch/migration/
MehrPascal-Compiler für den Attiny
Das Attiny-Projekt MikroPascal 1 Pascal-Compiler für den Attiny Manch einer möchte vielleicht unsere Attiny-Platine nicht mit BASCOM programmieren. Verschiedene Alternativen bieten sich an. Ein besonders
Mehr