> Inhalt: Einführung in das Programmieren mit Java > Tutorial: Erstellung von Anwendungen mit Java-Server-Faces (JSF) |
|
Letzte
Bearbeitung dieses Dokuments: |
Voraussetzungen für das Verständnis dieses Dokuments:Grundlegende
Kenntnisse im Erstellen von Web-Sites entsprechend dem JSF (Java
Server Faces) Modell. Kenntnisse im
Erstellen von Java-Klassen für ein EJB (Enterprise Java Bean)
entsprechend dem EJB3-Standard. |
Ungefährer Zeitbedarf zum Durcharbeiten dieses Dokuments:Arbeitszeit:
|
In diesem Schritt des Tutorials wird die Web-Seite mit den JSF-Elementen um eine Tabelle ergänzt.
Vorteil derartiger Tabellen ist, dass die Anzahl der Zeilen dynamisch entsprechend den anzuzeigenden Daten angepasst wird.
Das
Anzeigen von Daten in Tabellen erfordert aber auch zusätzlichen
Aufwand weil für eine Tabellenzeile eine Java-Klasse definiert
werden muss.
Aus einem Objekt dieser Klasse können die
JSF-Klassen die Daten, die in einer Tabellenzeile angezeigt werden
sollen, auslesen.
Voriger Schritt: Project einrichten und vereinfachten Code erstellen
Dank
für Vorarbeiten
Vorbemerkung
Vorbedingungen
Java-Klasse
ChatEntry.java
mit
den Attributen für eine Tabellenzeile erstellen
Adaptieren
der Java-Klasse JSFTutorial02.java
Adaptieren
der Datei ChatManagement.jsp
mit
der Web-Seite
WAR-Datei
neu packen und 'Deploy' der WAR-Datei im Java-Application-Server
(JAS)
Test
Hinweise
zur Fehlersuche
Gesamter
Code am Ende des Schrittes
Datei
index.html
Datei
ChatManagement.jsp
Datei
JSFTutorial02.java
Datei
ChatEntry.java
Datei
web.xml
Datei
faces-config.xml
Weitere
Schritte und verwandte Dokumentation
Nächster Schritt: EJB für Datenbank-Zugriff verwenden
Eine
umfassende Anleitung für das Verwenden von Tabellen in
JSF-Seiten finden Sie unter
http://balusc.blogspot.com/2006/06/using-datatables.html.
Diese Anleitung enthält auch zahlreiche Beispiele für
eine 'Verfeinerung' der Darstellung – z.B. Ändern der
Hintergrundfarbe bei geraden und ungeraden Tabellenzeilen.
Obwohl
Eclipse in 'deutscher Version' installiert werden kann, sind
die Abbildungen in diesem Tutorial mit der 'english Version'
erstellt. |
In
der Zwischenzeit gibt es Eclipse-Plugins die Anfangs-Dateien mit
Code-Gerüsten bzw. Parametern für JSF, generieren.
In
diesem Tutorial wird bewusst darauf auf die Verwendung eines
derartigen Plugins verzeichtet.
Aufgabe
dieses Tutorials ist auch, grundlegende Zusammenhänge einzelner
Dateien, die zu einer Web-Site entsprechend dem JSF-Framework
gehören, zu vermitteln.
Diese Zusammenhänge sind
leichter zu verstehen wenn die Dateien und deren Inhalt 'von Grund
auf' erstellt werden – und nicht durch ein zufällig
ausgewähltes Plugin vorgegeben werden.
Bei der 'Produktion' von Software spricht aber nichts dagegen wenn Sie sich durch ein Plugin Ihrer Wahl unterstützen lassen ;-).
Voriger Schritt (Project einrichten und vereinfachten Code erstellen) des Tutorials abgeschlossen – und dessen Vorbedingungen auch.
Diese
Klasse enthält die Variablen für jene Werte, die in einer
Zeile der Tabelle, die mit JSF-Anweisungen innerhalb der Webseite
definiert ist, angezeigt werden sollen.
Eine nähere
Erläuterung finden Sie in den Kommentaren innerhalb des
Java-Codes.
Zum Erstellen der Datei wird das Verzeichnis 'src/java' (innerhalb der Projects Java_JSF_02) mit der rechten Maustaste angeklickt und dann New > Class ausgewählt. |
Detaillierte Anleitungen inklusive Abbildungen der Fenster finden Sie im Dokument Tutorial: Einfache Benutzeroberfläche mit JSF und Aufruf von Methoden eines EJB (Java_JSF_01) – JSF-Code in der JSP-Datei verwenden und Java-Code in eigener Datei > Erstellen der Datei mit der Java-Klasse. |
Im
anschließend geöffneten Fenster ('New Java Class')
werden der Name des Java-Packages (js_jsf02)
und der Java-Klasse (ChatEntry)
festgelegt.
|
|
Die Datei ist jetzt unterhalb des Verzeichnisses für Java-Code (src/java) im 'Package Explorer' von Eclipse gelistet. Unter Umständen ist das Verzeichnis nicht sofort sichtbar sondern wird erst angezeigt, wenn mit der linken Maus-Taste das kleine Dreieck neben dem Project bzw. dem Verzeichnis angeklickt wird. Der Java-Code für diese Datei ist unter Gesamter Code am Ende des Schrittes > Datei ChatEntry.java dokumentiert und kann in die geöffnete Datei kopiert werden.
|
|
Diese
Java Klasse enthält jene Variablen, die innerhalb einer
Tabellenzeile auf der Web-Seite (Datei ChatManagement.jsp)
angezeigt werden.
Damit die Werte von den Klassen des
JSF-Frameworks aufbereitet werden können, sind für die
Variablen 'get' und 'set' Methoden zu implementieren; die Beispiele
für eine Variable finden Sie im anschließend.
/*
* Text
des Chat-Beitrags; vom Anwender eingegeben. */
private
String
Message_Text
;
Nachdem
die Werte der Variablen mit einer 'set'-Methode verändert und
durch eine 'get'-Methode ausgelesen werden, ist eine Definition als
private
ausreichend.
public
String
getMessage_Text() {
return
Message_Text
;
}
Die
'get'-Methode ist notwendig, weil die Klassen des JSF-Frameworks aus
den Anweisungen zum Einfügen eines Wertes in die Web-Seite
(Datei ChatManagement.jsp)
den Namen der Methode bilden.
In diesem Beispiel wird durch die
JSF-Anweisung <h:outputText
value
="#{chatEntry.
message_Text
}"
/>
von
den JSF-Klassen die Methode public
String
getMessage_Text()
erwartet
um den Wert in eine Tabellenzeile einfügen zu können.
public
void
setMessage_Text(String
parmMessage_Text) {
Message_Text
=
parmMessage_Text;
}
Die
'set'-Methode ist notwendig um den Wert eines Attributes verändern
zu können.
Das Verändern des Wertes ist notwendig, weil
als Endziel dieses Tutorials diese Werte aus einer Datenbank-Tabelle
ausgelesen werden und in das Attribut eines Objekts der Klasse
ChatEntry
übertragen
werden müssen.
Die
im vorigen Schritt erstellte Java-Klasse wird erweitert um die neuen
Variablen in der Datei für die Web-Seite (Datei
ChatManagement.jsp
)
bearbeiten zu können.
Die Änderungen in der Datei für
die Web-Seite werden im folgenden Abschnitt (Adaptieren
der Datei
ChatManagement.jsp
mit
der Web-Seite
)
vorgestellt.
Den
kompletten Code für diesen Schritt finden Sie im Abschnitt
Datei
JSFTutorial02.java
;
Sie können diesen Code kopieren oder die markierten Änderungen
manuell in die bestehende Datei einfügen.
Die
Änderungen fügen jene Variablen und Methoden ein, um die in
diesem Schritt zusätzlich eingefügte Tabelle in der
Web-Seite (Datei
ChatManagement.jsp
)
füllen zu können.
In diesem Schritt wird die Tabelle nur
mit fixen Werten gefüllt; das Lesen von der Datenbank wird dann
im nächsten Schritt vorgestellt.
/*
* Import
der Bibliothek und der Klasse für die Umwandlung von Datum/Zeit
im Format 'Timestamp'
* in eine Zeichenkette.
*/import
java.text.DateFormat;
/*
* Import
der Bibliothek für die Behandlung 'Vector' und 'Locale'.
*/import
java.util.*;
Zum
Erstellen des Strings (Zeichenkette) mit Datum und Uhrzeit und für
die Bildung eines Vectors mit den Werten für die Tabelle sind
die importierten Bibliotheken erforderlich.
/*
* Deklaration
des Vectors mit den Objekten (der Klasse 'ChatEntry') für die
Anzeige der
* Tabellenzeilen auf der Webseite mit den
JSF-Anweisungen. */
private
Vector<ChatEntry>
vecChatEntries
=
new
Vector<ChatEntry>();
Für
das Füllen der Tabelle auf der Web-Seite ist ein Vector mit den
Werten, die in der Tabelle angezeigt werden sollen,
erforderlich.
Dieser Vector enthält für jede
Tabellenzeile ein Object der Klasse ChatEntry
.
Der
Vector wird an die Klassen des JSF-Frameworks übergeben; diese
Klassen besorgen dann das Einfügen der einzelnen Werte in die
einzelnen Tabellenfelder in der Web-Seite.
/*
* Methode
zum Übertragen des Vector mit den Werten für die
anzuzeigenden Tabellenzeilen auf der Web-Seite. */
public
Vector<ChatEntry>
getChatEntries() {
/*
.
. . . . . . . .
.
. . . . . . . .
/*
* 'Zurückliefern
der 'gefüllten Tabelle'; diese wird dann von den Klassen des
JSF-Frameworks in die
* Web-Seite eingefügt.
*/
return
vecChatEntries
;
}
Die
'get'-Methode ist notwendig, weil die Klassen des JSF-Frameworks zum
Aufbau der Tabelle auf der Web-Seite (Datei ChatManagement.jsp
)
den Namen der Methode bilden.
In diesem Beispiel wird durch die
JSF-Anweisung
<h:dataTable
value
="#{SymbolicBeanName.
chatEntries
}"
var
=
"chatEntry"
border
=
"1"
/>
von
den JSF-Klassen die Methode
public
Vector<ChatEntry>
getChatEntries
()
erwartet
um die Tabelle in die Web-Seite einfügen zu können.
In
dieser Methode ist ein vorläufiger Algorithmus implementiert
mit dem die Tabelle mit fixen Werten gefüllt wird.
Die
Erklärung dieses Algorithmus finden Sie anschließend.
/*
* Für
diesen Schritt des Tutorials wird die 'Tabelle' mit fixen Werten
gefüllt.
* In einem weitern Schritt wird dann die
'Tabelle' mit den Werten aus der Datenbank-Tabelle gefüllt.
*//*
* Über
eine for-Schleife werden 5 Tabellenzeilen erstellt. */
for
(
int
i=1;i<=5;i++)
{
/*
* 'Construct'
eines Objektes für eine Tabellenzeile. */
ChatEntry
locChatEntry = new
ChatEntry();
/*
* Statt
der TCP/IP-Adresse wird die laufende Nummer eingetragen.
*/
locChatEntry.setErstellt_TCPIP_Adresse((new
Integer(i)).toString());
/*
* Holen
der aktuellen Zeit und umwandeln in eine 'deutschen' Text mit
Datum/Uhrzeit. */
String
strTimestamp =
DateFormat.getDateTimeInstance(
DateFormat.FULL
,
DateFormat.
LONG
,
Locale.
GERMAN
).format(
new
Date());
locChatEntry.setErstellt_Timestamp(strTimestamp);/*
* Hinweis
auf die Test-Version im Text für den Chat-Beitrag.
*/
locChatEntry.setMessage_Text("Automatisch
erstellter Eintrag "
+
(
new
Integer(i)).toString());
/*
* Hinzufügen
des gerade erstellten Objektes für eine Tabellenzeile zum
Vektor, der die gesamte
* anzuzeigende Tabelle
darstellt.
*/
vecChatEntries
.add(locChatEntry);
}Innerhalb
der
for
-Schleife
wird ein neues Objekt der Klasse
ChatEntry
konstruiert,
mit Werten gefüllt und in den Vector
vecChatEntries
,
der für den Aufbau der Tabelle auf der Web-Seite bestimmt ist,
eingefügt.
Die
im vorigen Schritt erstellte Web-Seite wird um eine Tabelle
erweitert.
Den
kompletten Code für diesen Schritt finden Sie im Abschnitt
Datei
ChatManagement.jsp
;
Sie können diesen Code kopieren oder die markierten Änderungen
manuell in die bestehende Datei einfügen.
Die
einzelnen JSF-Anweisungen für eine Tabelle innerhalb einer
Web-Seite finden Sie anschließend.
Tabelle
mit Fantasie-Einträgen:
<br>
<h:dataTable
value
="#{SymbolicBeanName.chatEntries}"
var
=
"chatEntry"
border
=
"1"
/><br>
<h:column>
<f:facet
name
=
"header"
>
<h:outputText
value
=
"Eintrag
vom"
/>
</f:facet>
<h:outputText
value
="#{chatEntry.erstellt_Timestamp}"
/>
</h:column>
<h:column>
<f:facet
name
=
"header"
>
<h:outputText
value
=
"TCP/IP-Adresse"
/>
</f:facet>
<h:outputText
value
="#{chatEntry.erstellt_TCPIP_Adresse}"
/>
</h:column>
<h:column>
<f:facet
name
=
"header"
>
<h:outputText
value
=
"Beitrags-Text"
/>
</f:facet>
<h:outputText
value
="#{chatEntry.message_Text}"
/>
</h:column>
</h:dataTable>
Die
JSF-Anweisung für eine Tabelle besteht aus mehreren Teilen; die
einzelnen Anweisungen werden im Folgenden erklärt.
<h:dataTable
value
="#{SymbolicBeanName.chatEntries}"
var
=
"chatEntry"
border
=
"1"
/>
.
. . . . . . .
.
. . . . . . .
</h:dataTable>h:dataTable
ist
die JSF-Anweisung für das Einfügen der
Tabelle.value
="#{SymbolicBeanName.chatEntries}"
ist
der Verweis auf die Java-Klasse und deren Methode, mit der die
Tabelle gefüllt wird.
Zur Erinnerung:SymbolicBeanName
wird
in der Datei
faces-config.xml
im
Bereich <managed-bean>
die
Klasse zugeordnet.chatEntries
ist
der Verweis auf die Methode (die den Namen getChatEntries()
haben
muss), mit der die Klassen für das JSF-Framework die Werte für
die Anzeige in der Tabelle auslesen. Dabei muss von der Methode ein
Objekt vom Java-Typ 'List' oder 'Vector' zurück geliefert
werden.var
=
"chatEntry"
ist
der Verweis auf den Namen der Klasse, die als Objekt-Elemente in der
'List' oder dem 'Vector', die von der Methode getChatEntries()
zurück
geliefert werden, enthalten sind.border
=
"1"
ist
die Anweisung, einen Rand um die einzelnen Felder der Tabelle zu
bilden.
Diese Anweisung ist analog der einfachen HTML-Anweisung
und wird in diesem Tutorial verwendet um die Tabelle in der
Web-Seite auch erkennbar werden zu lassen.
<h:column>
Ist
die JSF-Anweisung, wie eine einzelne Spalte der Tabelle zu gestalten
ist.
<f:facet
name
=
"header"
>
<h:outputText
value
=
"Beitrags-Text"
/>
Ist
eine Definitions-Mischung aus JSP- und JSF-Anweisungen für die
Überschrift der Tabellenspalte.
</f:facet>
Dabei wird über die
JSF-Anweisung <h:outputText
value
=
"Beitrags-Text"
/>
der
Text für die Überschrift festgelegt.
<h:outputText
value
="#{chatEntry.message_Text}"
/>
Ist
die JSF-Anweisung für das Einfügen des Wertes in das
jeweilige Feld der Tabelle.value
="#{chatEntry.message_Text}
"
ist
der Verweis auf die Java-Klasse und die Methode, mit der der
anzuzeigende Wert zurückgeliefert wird.
WAR-Datei
neu packen und 'Deploy' der WAR-Datei im Java Application Server
(JAS)
Das
Packen der WAR-Datei ist mit Abbildungen am Ende des Abschnitts
Project
einrichten und vereinfachten Code erstellen > Erstellen der
'Packaging Configuration' für die Web-Archive- (WAR-) Datei
(voriger
Schritt des Tutorials) beschrieben.
Das
Deploy für JBoss und Glassfish JAS sind unter
Tutorial:
Einfache Benutzeroberfläche mit JSF und Aufruf von Methoden
eines EJB (Java_JSF_01) – Erstellen von HTML-Dateien und Packen
in ein WAR (Web-Archive) > 'Deploy' der WAR-Datei im Java
Application Server (JAS) und Test
beschrieben;
eine Adaptierung für dieses Tutorial werden Sie mit dem bisher
erworbenen Wissen sicher schaffen ;-).
Test
Die
Web-Site wird in einem Web-Browser aufgerufen. Wenn Sie mit JBoss vertraut sind und auch den Zugriff von anderen Computern erlaubt haben können Sie selbstverständlich auch von einem anderen Computer zugreifen wenn Sie die relevante TCP/IP-Adresse verwenden. Für 5 Sekunden wird der Inhalt der Datei 'index.html' angezeigt. |
|
Nach 5 Sekunden Wartezeit wird die Seite für die Erfassung und Anzeige des Textes angezeigt. Sie sehen die Tabelle. |
|
Zusätzlich können Sie mit einem Text im Eingabefeld testen ob nach dem Anklicken der Schaltfläche [ Beitrag senden ] die Uhrzeit in der Tabelle verändert ist. |
|
Hinweise
zur Fehlersuche
Im
Gegensatz zum Codieren in Java kann bei den JSF-Anweisungen keine
Syntax-Überprüfung durchgeführt werden.
Ein –
vielleicht leicht zu übersehender – Tippfehler führt
dazu, dass die Web-Seite nicht wie erwartet funktioniert oder schon
beim 'deploy' an den JAS eine kryptische Fehlermeldung auftritt.
Als
LeserIn dieses Tutorials haben Sie vermutlich wenig Erfahrung mit der
Eingrenzung eines Fehlers – deswegen folgen leicht
auszuführende Schritte zur Eingrenzung des Fehlers.
Prüfen
des Java Application Server (JAS) mit fertigen WAR- und EAR-Dateien
Es
ist nicht ausgeschlossen, dass die Installation oder Konfiguration
des JAS das korrekte Verarbeiten von WAR- oder EAR-Dateien
verhindert.
Um diese Fehlermöglichkeit auszuschliessen,
können Sie folgende Dateien Herunterladen und zum Testen
verwenden:
Java_JSF_02b.war Dies
Datei wurde mit der JBoss
Version 5.0.1.GA und Glassfish
Version 2.1 getestet – für andere JAS kann leider keine
Garantie übernommen werden.
Das
erwartete Ergebnis finden Sie im Abschnitt Test
.
Prüfen
auf Tippfehler wenn Sie die Dateien nicht aus diesem Tutorial kopiert
haben
Wenn
Sie die Dateien selbst getippt und vielleicht gleich Modifikationen
vorgenommen haben ist es sehr wahrscheinlich, dass ein oder mehrere
Tippfehler der Grund für das Nicht-Funktionieren sind.
Bei
den JSF-Anweisungen und den darin verwendeten Referenzen auf
Java-Klassen und deren Methoden ist die Übereinstimmung von
Groß- und Kleinschreibung wichtig !
Eine
Liste möglicher Ursachen finden Sie im Dokument
Mögliche
Fallstricke bei der Entwicklung von Anwendungen mit JSF (Java Server
Faces)
.
Kopieren
Sie die Dateien aus diesem Tutorial und Prüfen Sie die
jeweiligen 'Packaging configurations'
Wenn
Sie bis jetzt die Ursache für den Fehler nicht gefunden haben
empfehle ich folgendes Vorgehen:
Kopieren
Sie den Inhalt der Dateien aus diesem Dokument (Abschnitt
Gesamter
Code am Ende des Schrittes
).
Prüfen
Sie noch einmal ob Sie beim
Erstellen
der 'Packaging Configuration' für die Web-Archive- (WAR-) Datei
nicht
vergessen haben, Dateien aufzunehmen.
Wenn
der Fehler noch immer auftritt – und die heruntergeladene,
'fertige' Datei 'Java_JSF_02b.war' aber funktioniert hat –
prüfen Sie die Größen der jeweiligen Dateien.
Wenn
die selbst erstellte WAR-Datei wesentlich kleiner ist als die
heruntergeladene, haben Sie mit hoher Wahrscheinlichkeit einen
Fehler der 'Packaging Configuration'.
Wenn Sie mit dem 'Archive
Manager' (ein Anwendungsprogramm zum Editieren von Dateien im
'Archive'-Format) vertraut sind dann verwenden Sie diesen zum
Untersuchen auf Unterschiede.
Gesamter
Code am Ende des Schrittes
Der Inhalt dieser Datei wurde in diesem Schritt nicht verändert.
<html>
<head><title>JavaScout
:: Java-Server-Faces (JSF) Tutorial mit DB-Zugriff
(Java_JSF_02)
</title></head>
<body>
<meta
http-equiv
=
"refresh"
content
=
"5;
URL=ChatManagement.jsf"
>
Das
ist die <i>
index.html
</i>
Datei.
<br>
<br>
<h1>Willkommen
beim Tutorial f
ü
r
Java-Server-Faces (JSF) mit Zugriff auf eine Datenbank
!
</h1><br>
<br>
Das
ist die Einstiegsseite – von hier werden Sie automatisch auf
die Web-Seite fü
r
die Ein- und Ausgabe der Daten weitergeleitet.
<br>
<br><a
href
=
"ChatManagement.jsf"
><p
align
=
CENTER
>
Gleich
gehts automatisch weiter ...
<br>
gehts
nicht automatisch weiter, dann auf diesen Text klicken !
</p></a>
</body>
</html>
Der
Code in dieser Datei ist nur vorläufig.
In diesem Schritt des
Tutorials wird zusätzlich zum Grundgerüst eine Tabelle
eingefügt.
Die Vervollständigung der Version bis zur
Einbindung des Datenbank-Zugriffs folgt in weiteren Schritten.
Gegenüber dem vorigen Schritt zusätzlich eingefügte Teile sind mit gelbem Hintergrund versehen.
<%@
taglib
uri
=
"http://java.sun.com/jsf/core"
prefix
=
"f"
%>
<%@
taglib
uri
=
"http://java.sun.com/jsf/html"
prefix
=
"h"
%>
<%@
taglib
uri
=
"http://java.sun.com/jsp/jstl/core"
prefix
=
"c"
%>
<f:view>
<html>
<head>
<title>JavaScout
:: Java-Server-Faces (JSF) Tutorial mit DB-Zugriff
(Java_JSF_02)
</title>
</head>
<body>
Das
ist die
<i><b>
ChatManagement.jsp
</b></i>
Datei.
<br>
<br>
<h1>Willkommen
beim Zwischentest des Tutorials für Java-Server-Faces (JSF) mit
Zugriff auf eine Datenbank !
</h1>
.
<br>
<br>
Ziel
dieses Schrittes ist, eine Tabelle in die Web-Seite
einzufügen.
<br>
Die
Tabelle wird vorläufig mit fixen Werten gefüllt; noch nicht
mit Werten von der Datenbank.
<br>
<br>
<br>
<h:form
id
=
"Step01Form"
>
Ihr
Beitrag zum Chat, bitte:
<br>
<h:inputTextarea
rows
=
"10"
cols
=
"50"
value
="#{SymbolicBeanName.chatText}"
/><br>
<br>
<h:commandButton
action
=
"storeChatText"
value
=
"Beitrag
senden"
/><br>
</h:form>
<br>
Eingegebener
Text (zur Kontrolle):
<br>
<h:outputText
value
="#{SymbolicBeanName.chatText}"
/>
<br>
<br>
<br>
Tabelle
mit Fantasie-Einträgen:
<br>
<h:dataTable
value
="#{SymbolicBeanName.chatEntries}"
var
=
"chatEntry"
border
=
"1"
><br>
<h:column>
<f:facet
name
=
"header"
>
<h:outputText
value
=
"Eintrag
vom"
/>
</f:facet>
<h:outputText
value
="#{chatEntry.erstellt_Timestamp}"
/>
</h:column>
<h:column>
<f:facet
name
=
"header"
>
<h:outputText
value
=
"TCP/IP-Adresse"
/>
</f:facet>
<h:outputText
value
="#{chatEntry.erstellt_TCPIP_Adresse}"
/>
</h:column>
<h:column>
<f:facet
name
=
"header"
>
<h:outputText
value
=
"Beitrags-Text"
/>
</f:facet>
<h:outputText
value
="#{chatEntry.message_Text}"
/>
</h:column>
</h:dataTable></body>
</html>
</f:view>
Der
Code in dieser Datei ist nur vorläufig.
In diesem Schritt des
Tutorials werden die Methoden, die für die JSF-Tabelle innerhalb
der Webseite benötigt werden, eingefügt.
Die
Vervollständigung der Version bis zur Einbindung des
Datenbank-Zugriffs folgt in weiteren Schritten.
Gegenüber dem vorigen Schritt zusätzlich eingefügte Teile sind mit gelbem Hintergrund versehen.
package
js_jsf02;
/*
* Diese
Klasse enthält Methoden für den Austausch der Werte
zwischen der in JSF-Code festgelegten
* Ein- bzw.
Ausgabefeldern der Web-Seite (ChatManagement.jsp) und den in dieser
Klasse definierten Variablen.
* In einem weiteren
Schritt werden die Werte aus dieser Klasse auf die Datenbank-Tabelle
geschrieben bzw.
* von der Datenbank-Tabelle gelesen.
*//*
* Import
der Bibliothek und der Klasse für die Umwandlung von Datum/Zeit
im Format 'Timestamp'
* in eine Zeichenkette. */import
java.text.DateFormat;
/*
* Import
der Bibliothek für die Behandlung 'Vector' und 'Locale'.
*/import
java.util.*;
/*
* Deklaration
der Klasse; diese muss 'public' sein sonst
* können
die Methoden der JSF-Klassen nicht darauf zugreifen. */public
class
JSFTutorial02
{
/*
* Deklaration
der Variablen für den Chat-Text der auf der Web-Seite eingegeben
und
* wieder angezeigt wird. Als 'private' deklariert
weil über die JSF-Klassen der Zugriff darauf
* nur
über die get- und set-Methoden möglich ist.
* Der
Anfangswert wird zugewiesen um zu demonstrieren, dass dieser Wert
auch bei der
* anfänglichen Anzeige der Web-Seite
angezeigt wird. */
private
String
ChatText
=
"Chat-Beitrag
hier eintippen . . ."
;
/*
* Deklaration
des Vectors mit den Objekten (der Klasse 'ChatEntry') für die
Anzeige der
* Tabellenzeilen auf der Webseite mit den
JSF-Anweisungen. */
private
Vector<ChatEntry>
vecChatEntries
=
new
Vector<ChatEntry>();
/*
* Methode
zum Übertragen des auf der Web-Seite eingegebenen Chat-Textes in
die Variable dieser Klasse. */
public
void
setChatText(String
parmChatText) {
ChatText
=
parmChatText;
}
/*
* Methode
zum Übertragen des Namens in der Variable dieser Klasse auf das
passende Feld der Web-Seite. */
public
String
getChatText() {
return
ChatText
;
}
/*
* Methode
zum Übertragen des Vector mit den Werten für die
anzuzeigenden Tabellenzeilen auf der Web-Seite. */
public
Vector<ChatEntry>
getChatEntries() {
/*
* Für
diesen Schritt des Tutorials wird die 'Tabelle' mit fixen Werten
gefüllt.
* In einem weitern Schritt wird dann die
'Tabelle' mit den Werten aus der Datenbank-Tabelle gefüllt.
*//*
* Über
eine for-Schleife werden 5 Tabellenzeilen erstellt. */
for
(
int
i=1;i<=5;i++)
{
/*
* 'Construct'
eines Objektes für eine Tabellenzeile. */
ChatEntry
locChatEntry = new
ChatEntry();
/*
* Statt
der TCP/IP-Adresse wird die laufende Nummer eingetragen.
*/
locChatEntry.setErstellt_TCPIP_Adresse((new
Integer(i)).toString());
/*
* Holen
der aktuellen Zeit und umwandeln in eine 'deutschen' Text mit
Datum/Uhrzeit. */
String
strTimestamp =
DateFormat.getDateTimeInstance(
DateFormat.FULL
,
DateFormat.
LONG
,
Locale.
GERMAN
).format(
new
Date());
locChatEntry.setErstellt_Timestamp(strTimestamp);/*
* Hinweis
auf die Test-Version im Text für den Chat-Beitrag.
*/
locChatEntry.setMessage_Text("Automatisch
erstellter Eintrag "
+
(
new
Integer(i)).toString());
/*
* Hinzufügen
des gerade erstellten Objektes für eine Tabellenzeile zum
Vektor, der die gesamte
* anzuzeigende Tabelle
darstellt.
*/
vecChatEntries
.add(locChatEntry);
}/*
* 'Zurückliefern
der 'gefüllten Tabelle'; diese wird dann von den Klassen des
JSF-Frameworks in die
* Web-Seite eingefügt.
*/
return
vecChatEntries
;
}
}
package
js_jsf02;
/*
* Diese
Klasse entspricht einer Tabellenzeile der mit '<h:dataTable . . .
> definierten
* Tabelle innerhalb der Webseite mit
JSF-Anweisungen.
* In einem weiteren Schritt übernimmt
ein Objekt dieser Klasse die Werte eines Tupel
* aus
der Datenbank-Tabelle. *//*
* Deklaration
der Klasse; diese muss 'public' sein sonst
* können
die Methoden der JSF-Klassen nicht darauf zugreifen. */public
class
ChatEntry
{
/*
* Deklaration
der Variablen; diese sind als 'private' deklariert weil über die
JSF-Klassen der Zugriff darauf
* nur über die get-
und set-Methoden möglich ist. */
/*
* Datum und
Uhrzeit (als String / Zeichenkette) zu dem der Chat-Beitrag erstellt
wurde. */
private
String
Erstellt_Timestamp
;
/*
* TCP/IP-Adresse
jenes Computers auf dem der Chat-Beitrag erstellt wurde. */
private
String
Erstellt_TCPIP_Adresse
;
/*
* Text
des Chat-Beitrags; vom Anwender eingegeben. */
private
String
Message_Text
;
/*
*
* Methoden
zum Übertragen des Wertes in der jeweiligen Variable dieser
Klasse auf das passende Feld
* der Tabellenzeile auf
der Web-Seite.
* Zur Erinnerung:
* Die
Namen der Methoden müssen den strikten Regeln für JSF
folgen ! */
public
String
getErstellt_Timestamp() {
return
Erstellt_Timestamp
;
}
public
String
getErstellt_TCPIP_Adresse() {
return
Erstellt_TCPIP_Adresse
;
}
public
String
getMessage_Text() {
return
Message_Text
;
}
/*
*
* Methoden
zum Übertragen von Werten in die Variablen dieser
Klasse.
* Diese Methoden sind deswegen notwendig weil
die Variablen dieser Klasse 'private' definiert sind
* und
somit die Werte nicht direkt verändert werden können.
*/
public
void
setErstellt_Timestamp(String
parmErstellt_Timestamp) {
Erstellt_Timestamp
=
parmErstellt_Timestamp;
}
public
void
setErstellt_TCPIP_Adresse(String
parmErstellt_TCPIP_Adresse) {
Erstellt_TCPIP_Adresse
=
parmErstellt_TCPIP_Adresse;
}
public
void
setMessage_Text(String
parmMessage_Text) {
Message_Text
=
parmMessage_Text;
}
}
Der Inhalt dieser Datei wurde in diesem Schritt nicht verändert.
<?xml
version
=
"1.0"
encoding
=
"ISO-8859-1"
?>
<web-app
id
=
"JSFTutorial02"
version
=
"2.4"
xmlns=
"http://java.sun.com/xml/ns/j2ee"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemalocation=
"http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
>
<display-name>JavaScout
JSF Tutorial 02
(Java_JSF_02)
</display-name>
<servlet>
<servlet-name>JSFTutorial02
Faces
Servlet
</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet
</servlet-class>
<load-on-startup>1
</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>JSFTutorial02
Faces
Servlet
</servlet-name>
<url-pattern>*.jsf
</url-pattern>
</servlet-mapping></web-app>
Für
JBoss
(getestet mit Version 5.0.1) ist das Weglassen der Anweisung
xmlns
=
"http://java.sun.com/xml/ns/j2ee"
notwendig:<?xml
version
=
"1.0"
encoding
=
"ISO-8859-1"
?>
<web-app
id
=
"JSFTutorial02"
version
=
"2.4"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemalocation=
"http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
>
<display-name>JavaScout
JSF Tutorial 02
(Java_JSF_02)
</display-name>
<servlet>
<servlet-name>JSFTutorial02
Faces
Servlet
</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet
</servlet-class>
<load-on-startup>1
</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>JSFTutorial02
Faces
Servlet
</servlet-name>
<url-pattern>*.jsf
</url-pattern>
</servlet-mapping></web-app>
Der Inhalt dieser Datei wurde in diesem Schritt nicht verändert.
<faces-config
xmlns
=
"http://java.sun.com/xml/ns/javaee"
xmlns:xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation
=
"http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
version
=
"1.2"
>
<managed-bean>
<managed-bean-name>SymbolicBeanName
</managed-bean-name>
<managed-bean-class>js_jsf02.JSFTutorial02
</managed-bean-class>
<managed-bean-scope>request
</managed-bean-scope>
</managed-bean>
<navigation-rule>
<from-view-id>/ChatManagement.jsp
</from-view-id>
<navigation-case>
<from-outcome>storeChatText
</from-outcome>
<to-view-id>/ChatManagement.jsp
</to-view-id>
</navigation-case>
</navigation-rule></faces-config>
Dokument |
Inhalt |
Im
nächsten Schritt des Tutorial wird das EJB für den
Zugriff auf die Datenbank-Tabelle aufgerufen. |