> Inhalt: Entwickeln von Web-Anwendungen mit Java-Server-Faces |
|
Letzte
Bearbeitung dieses Dokuments: |
Voraussetzungen für das Verständnis dieses Dokuments:Grundkenntnisse im
Schreiben von Dokumenten im HTML-Format. |
Ungefährer Zeitbedarf zum Durcharbeiten dieses Dokuments:Arbeitszeit:
|
In
diesem Schritt des Tutorials wird eine JSP-Datei (Java Server Pages)
erstellt in die JSF (Java Server Faces) Kommandos integriert
sind.
Diese JSF-Kommandos rufen Methoden einer Java-Klasse auf die
die aktuelle Zeit abfragen und in verschiedenen sprach-spezifischen
Formaten darstellen.
Ziele dieses Tutorial-Schrittes sind:
Erste Erfahrungen bei der Integration von JSF-Kommandos in einer JSP-Datei.
Verstehen
von set- und get-Methoden einer Java-Klasse.
Damit werden die
Werte zwischen der Web-Seite und der zugehörigen Java-Klasse
ausgetauscht.
Verstehen der Steuer-Dateien die die Java-Klasse mit der/den JSP-Datei/en verknüpfen und die die Anzeige einer anderen JSP-Datei abhängig vom Ergebnis der Java-Methode steuern.
Eine
schematische Darstellung der Funktion am Ende dieses
Tutorial-Schrittes:
Voriger Schritt: Ergänzen mit einer JSP-Datei und Packen in ein EAR (Enterprise-ARchive)
Dank
für Vorarbeiten
Vorbemerkung
Vorbedingungen
Erstellen
der JSP-Datei mit dem Dokument und integrierten
JSF-Kommandos
Verändern
der Datei index.html
Zwischentest:
Aufrufen der Web-Site im Browser
Erstellen
der Datei mit der Java-Klasse
(JSFTutorial01.java)
Konfigurationsdatei
web.xml
erstellen
Konfigurationsdatei
faces-config.xml
erstellen
Erweitern
der 'Packaging Configuration' für die Web-Archive- (WAR-)
Datei
* Verzeichnis
WEB-INF erstellen
* Verzeichnis
classes erstellen
* Zu
packende Dateien für die Java-Klassen festlegen
* Zu
packende Konfigurationsdateien festlegen
* WAR-
(Web-ARchive) Datei erstellen
'Deploy'
der WAR-Datei im Java Application Server (JAS) und
Test
Konfigurationsdatei
application.xml
anpassen
'Packaging
Configuration' für die Enterprise-Archive- (EAR-)
Datei
'Deploy' der EAR-Datei
im Java Application Server (JAS) und Test
Umbenennen
der EAR-Datei und neuer Test
Hinweise
zur Fehlersuche
Gesamter
Code am Ende des Schrittes
Datei
index.html
Datei
page_step03.jsp
Datei
JSTutorial01.java
Datei
web.xml
Datei
faces-config.xml
Datei
application.xml
Weitere
Schritte und verwandte Dokumentation
Nächster Schritt: Ergebnisabhängige Web-Seiten
Eine besonders wertvolleAnleitung (in englischer Sprache) war der Blog von 'BalusC' (http://balusc.blogspot.com/2008/01/jsf-tutorial-with-eclipse-and-tomcat.html).
Darin
wird beschrieben, wie der in Eclipse
3.4 verfügbare 'Wizard' die Entwicklung von JSF-Anwendungen
unterstützt.
Der 'Wizard' beschleunigt die Entwicklung von
JSF-Anwendungen; der Gebrauch ist aber erst sinnvoll wenn Sie mit den
Grundlagen von JSF vertraut sind.
Obwohl
Eclipse in 'deutscher Version' installiert werden kann, sind
die Abbildungen in diesem Dokument mit der 'english Version'
erstellt. |
Für
die JSF-Anweisungen innerhalb des HTML-Codes in der JSP-Datei und die
Definitionen in den Dateien mit XML-Struktur kann keine Prüfung
auf syntaktische Fehlerfreiheit durchgeführt werden.
Durch
die teilweise kryptische Benennung von Variablen ist die
Wahrscheinlichkeit von unerkannten Tippfehlern in diesen Dateien sehr
hoch.
Diese Fehler führen oft zu schwer verständlichen
Fehlermeldungen des Java Application Servers (JAS) oder verhindern
ein korrektes Funktionieren des Ergebnisses ohne weitere
Fehlermeldungen.
Hinweise zum Finden von Fehlern finden Sie im Abschnitt Hinweise zur Fehlersuche.
Voriger Schritt des Tutorials (Ergänzen mit einer JSP-Datei und Packen in ein EAR (Enterprise-ARchive)) erfolgreich abgeschlossen.
Basiskenntnisse der Programmiersprache Java.
Erstellen
der JSP-Datei mit dem Dokument und integrierten JSF-Kommandos
Das
Erstellen von Verzeichnissen und Dateien wurde im Schritt
1 des Tutorials ausführlich beschrieben; in diesem Abschnitt
beschränken sich die Beschreibungen auf eine Kurzfassung.
Die zu erstellende Datei hat den Namen page_step03.jsp. und ist im gleichen Verzeichnis wie die Datei 'index.html'.
Sofern nicht der 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) > Möglicher Fehler beim Editieren von Dateien im HTML-Format und Umgehung des Fehlers beschriebene Fehler vorhanden ist, wurde die Datei zum Editieren geöffnet.
|
|
Der HTML-Code mit integrierten Java-Anweisungen für diese Datei ist unter Gesamter Code am Ende des Schrittes > Datei page_step03.jsp dokumentiert und kann in die geöffnete Datei kopiert werden.
Anschließend eine kurze Erklärung der Kommandos die nicht HTML-Code sind; wenn Ihre Zeit knapp ist können Sie die Erklärung auch überspringen und gleich mit dem Abschnitt Verändern der Datei index.html fortsetzen.
<%@
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"
%>
Diese
Anweisungen legen fest, mit welchen 'Preprocessor' die einzelnen
Anweisungen verarbeitet werden.
Nachdem einzelne
Anweisungs-Codes sowohl für JSF als auch für HTML gültig
sind, wird durch den 'prefix
'
festgelegt, wie die Anweisung verarbeitet werden soll.
Durch
voransetzen des jeweiligen Prefix vor die Anweisung (z.B. bei
<h:form
...
)
wird festgelegt welche Bedeuting diese Anweisung hat.
Das
Vergeben des Buchstabens für den 'prefix
'
ist frei wählbar; es hat sich aber eine Quasi-Norm
herausgebildet, dass für JSF-Anweisungen der Buchstabe "f"
und
für HTML-Anweisungen der Buchstabe "h"
verwendet
wird.
Ich empfehle, diese Buchstaben ebenfalls zu verwenden um
den Code leichter lesbar zu machen.
In diesem Beispiel nicht
verwendet
werden Anweisungen für Java Server Pages (JSP) für die
http://java.sun.com/jsp/jstl/core
f
(JSP
Standard
Tag
Library)
festgelegt wurde. Nachdem dieses Beispiel auch als Vorlage für
weitere JSF-Pages dienen soll wurde dieser 'Preprocessor' trotzdem
aufgenommen.
Für Spezialisten ist es auch möglich,
eigene Preprozessoren für die Interpretation einer speziell
entwickelten Syntax zu verwenden.
Eine Anleitung dafür
übersteigt aber die Aufgabe dieses Tutorials bei weitem.
<f:view>
Diese
Anweisung ist der Beginn des Teils der Web-Seite, der durch die
JSF-Preprozessoren des JAS (Java Application Server) verarbeitet
wird.
Die Verarbeitung durch den JSF-Preprozessor endet mit der
Anweisung </f:view>
.
<h:form
id
=
"Step03Form"
>
Anweisung,
dass die nachfolgende Anweisung (form
)
als HTML-Code – und nicht als JSF-Code – verarbeitet
werden soll.
Diese Unterscheidung zwischen HTML und JSF ist dann
notwendig wenn eine Anweisung mit gleichem 'Namen' für HTML und
JSF existiert.
<h:inputText
id
=
"Name"
value
="#{SymbolicBeanName.personName}"
>
bzw.
<h:outputText
...
>
Felder
für die Ein- und Ausgabe von einzelnen Werten.
Die Syntax
dieser Anweisungen ist analog zu HTML-Anweisungen.
Über
den Parameter value
="#{SymbolicBeanName.personName}"
wird
festgelegt:
* Die Java-Klasse die den eingegebenen
Wert verarbeitet bzw. die den anzuzeigenden Wert liefert.
Dabei
wird über den symbolischen Namen der Klasse (in diesem
Beispiel: SymbolicBeanName
)
aus der Datei 'faces-config.xml',
XML-Element <managed-bean>
der
reale Namen der Klasse ermittelt.
* Die Methode(n),
mit der der Wert von/zu der Java-Klasse übertragen wird;
diese wird aus dem Namen (in diesem
Beispiel: personName
)
gebildet.
Diese
Anweisung ist essentiell für die korrekte Anzeige von Werten –
aber durch die komplizierte Syntax ein häufiger Quell von
Fehlern.
Eine
detaillierte Beschreibung der Referenzen zwischen symbolischen Namen
und Realen Klassen bzw. Methoden und Hinweise auf mögliche
Fehler finden Sie unter Mögliche
Fallstricke bei der Entwicklung von Anwendungen mit JSF (Java Server
Faces) > Fehlermeldung 'Property 'xxx'
not found on type package.class".
<h:commandButton
action
=
"getDateTime"
value
=
"Datum/Zeit
anzeigen"
>
Schaltfläche
für das Auslösen der Verarbeitung des eingegebenen Wertes;
analog der 'puren' HTML-Anweisung submit.
Das
Anklicken einer Schaltfläche ist die einfachste Form um eine
Verarbeitung zu beginnen.
Es gibt auch weitere Möglichkeiten
(z.B. das Reagieren auf Änderung eines Wertes in einem
Eingabefeld) – um diesen Schritt des Tutorials einfach zu
halten wurden diese Möglichkeiten aber nicht verwendet.
Eine
weitere Vereinfachung ist, dass der Wert, der über die
Folgeseite entscheidet (im Beispiel: action
=
"getDateTime"
)
fix festgelegt ist und nicht vom Ergebnis der Verarbeitung der
Eingabewerte abhängt.
Die Folgeseite für
action
=
"getDateTime"
ist
in der Datei 'faces-config.xml', XML-Element <navigation-rule>
festgelegt.
Verändern
der Datei
index.html
Damit
die gerade erstellte JSP-Datei aufgerufen werden kann, muß in
der Datei 'index.html' der passende Link gesetzt werden.
Weiters
wird der Erklärungstext für diesen Schritt des Tutorials
angepaßt.
Der geänderte HTML-Code für diese Datei
ist unter Gesamter
Code am Ende des Schrittes > Datei
index.html
dokumentiert
und kann in die geöffnete Datei kopiert werden. .
Anschließend eine kurze Erklärung des Links zur Datei 'page_step03.jsp'; wenn Ihre Zeit knapp ist können Sie die Erklärung auch überspringen und gleich mit dem Abschnitt Zwischentest: Aufrufen der Web-Site im Browser fortsetzen.
<a
href
=
"page_step03.
jsf
"
>
Link
zur Seite
<i>
page_step03.jsp
</i>
mit
Anweisungen f
ü
r
JSF (Java Server Faces).
</a>
Es
scheint wie ein Fehler, dass als Referenz für den Link zur
Datei mit der Web-Seite mit den integrierten JSF-Anweisungen
(page_step03.jsp
)
die Dateinamenserweiterung
jsf
verwendet
wird.
Das ist aber eine Besonderheit, damit der JSF-Preprocessor
(Teil des Java Application Server) unterscheiden kann, ob eine
'verlinkte' Datei Anweisungen für Java-Server-Pages (JSP) oder
für JSF (Java Server Faces) enthält.
Auf welche
Dateinamenserweiterungen in Link-Referenzen der JSF-Preprozessor
reagieren soll ist in der Datei 'web.xml', XML-Element
<servlet-mapping>
festgelegt.
Fehlermeldungen
einer falschen Spezifikation für die Referenzierung und weitere
Hinweise zur Fehlerbehebung finden Sie unter
Mögliche
Fallstricke bei der Entwicklung von Anwendungen mit JSF (Java Server
Faces) > Kryptische Meldung beim Aufrufen der 'verlinkten'
Web-Seite
.
Zwischentest:
Aufrufen der Web-Site im Browser
Um
Überprüfen zu können ob die erstellten Dateien im
HTML-Format korrekt sind wird jetzt ein Web-Browser verwendet.
Die
Abbildungen sind mit 'Firefox' erstellt – es kann aber auch
jeder andere Web-Browser benutzt werden.
Das
Aufrufen einer Datei wurde bereits in den vorigen Schritten
beschrieben; das Aufrufen der Datei 'index.html' und das Navigieren
zu der in diesem Schritt erstellten JSP-Datei erfolgt ebenso.
Erstellen
der Datei mit der Java-Klasse (
JSFTutorial01.java
)
Das
Erstellen von Verzeichnissen und Dateien wurde im Schritt
1 des Tutorials ausführlich beschrieben; in diesem Abschnitt
beschränken sich die Beschreibungen auf eine Kurzfassung.
Die zu erstellende Datei hat den Namen JSFTutorial01.java (dieser Name wird durch den Namen der Java-Klasse festgelegt) und ist im Verzeichnis 'src/java'.
|
|
Der Java-Code ist unter Gesamter Code am Ende des Schrittes > Datei JSFTutorial01.java dokumentiert und kann in die geöffnete Datei kopiert werden.
Anschließend eine kurze Erklärung des Codes; wenn Ihre Zeit knapp ist können Sie die Erklärung auch überspringen und gleich mit dem Abschnitt Konfigurationsdatei web.xml erstellen fortsetzen.
Meiner
Meinung nach größter Vorteil von JSF gegenüber
Struts ist, dass die zugeordnete(n) Java-Klasse(n) keine Vererbung
von JSF-spezifischen Basisklassen erfordern.
Damit brauchen keine
zusätzlichen Bibliotheken importiert werden und es können
bei Bedarf Anwendungs-eigene Basisklassen verwendet werden.
Im
Beispiel wird bei der Definition der Klasse keine Vererbung
angewandt:/*
* package
util enthält die Klasse für internes Datum und Zeit.
*/import
java.util.*;
/*
* package
und Klasse für sprchabhängige Anzeige von Datum und Zeit.
*/import
java.text.DateFormat;
/*
* Deklaration
der Klasse; diese muss 'public' sein sonst
* können
die Methoden der JSF-Klassen nicht darauf zugreifen. */public
class
JSFTutorial01
{
/*
Eine
Einschränkung von JSF gegenüber Struts ist, dass die
Übertragung von Daten zwischen den Feldern der Web-Seite und
der Java-Klasse einer sehr strikten Syntax folgen muss und nur über
get- und set-Methoden erfolgen kann.
Eine Grafik dazu finden Sie
unter
Mögliche
Fallstricke bei der Entwicklung von Anwendungen mit JSF (Java Server
Faces) > Fehlermeldung "Property '
xxx
'
not found on type
package.class
"
beim Aufrufen einer Seite
.
Nachdem
nicht direkt auf die Variablen der Klasse zugegriffen werden kann
sind diese als definiert.
Um zu zeigen, wie in der Java-Klasse
Vorgabe-Werte definiert werden können, wird ein Wert für
die Variable Name
festgelegt.
Dieser Wert wird bei der ersten Anzeige der Web-Seite im Eingabefeld
angezeigt.
* Der
Anfangswert wird zugewiesen um zu demonstrieren, dass dieser Wert
auch bei der
* anfänglichen Anzeige der
Web-Seite angezeigt wird. */
private
String
Name
=
"FreundIn
von JSF"
;
/*
* Deklaration
der Variablen für die Anzeige von Datum und Zeit. */
private
String
DateTimeFormattiert
;
/*
Das
Übertragen der Werte zwischen der Web-Seite und der Klasse
erfolgt ausschließlich durch get- und set-Methoden.
Nachdem
der Wert von Name
sowohl
als Eingabewert übernommen als auch wieder angezeigt werden
muss, sind dafür get- und set-Methode notwendig.
* Methode
zum Übertragen des auf der Web-Seite eingegebenen Namens in die
Variable dieser Klasse. */
public
void
setPersonName(String
parmName) {
Name
=
parmName;
}
/*
* Methode
zum Übertragen des Namens in der Variable dieser Klasse auf das
passende Feld der Web-Seite. */
public
String
getPersonName() {
return
Name
;
}
Möglicher
Stolperstein:
Auch wenn ein Wert nur als 'Eingabe' auf der
Web-Seite erwartet wird (<h:inputText
id
=
"Name"
value
="#{SymbolicBeanName.personName}"
>
)
ist auch eine get-Methode notwendig.
Das
ist dadurch bedingt, dass der JSF-Prozessor auf jeden Fall einen
eventuell definierten Wert als Vorgabe im Eingabefeld anzeigen
will.
Der Wert für Datum und Zeit wird nur auf der
Web-Seite angezeigt (<h:outputText
value
="#{SymbolicBeanName.dateTimeFormatted}"
/>
);
deswegen ist nur eine get-Methode notwendig.
/*
* Methode
zum Übertragen der Zeichenkette mit Datum und Zeit in der
Variable dieser
* Klasse auf das passende Feld der
Web-Seite.
* Vor dem 'zurückliefern' der
Zeichenkette wird der aktuelle Wert ermittelt und passend
formattiert.
*
* Dieser Wert wird nur
vom Objekt dieser Klasse auf das passende Feld der Web-Seite
übertragen -
* deswegen ist keine zugehörige
'set'-Methode definiert. */
public
String
getDateTimeFormatted() {
/*
* 'Holen'
der aktuellen Zeit vom Computer auf dem der Java Application Server
(JAS) ausgeführt wird. */
Date
DateTimeNow = new
Date();
Konfigurationsdatei
web.xml
erstellen
Diese
Datei enthält verschiedene Anweisungen an den
Java-Application-Server (JAS); vor Allem welche Dateien mit
Web-Inhalten auch Java-Server-Faces- (JSF-) Anweisungen
enthalten.
Eine Erklärung der verwendeten Anweisungen finden
Sie am Ende dieses Abschnitts.
Die Namen für Verzeichnis
('WEB-INF') und Datei ('web.xml') – bitte auch die Groß-
und Kleinschreibung beachten – sind durch Normen vorgegeben und
können nicht verändert werden.
Das
Erstellen von Verzeichnissen und Dateien wurde im Schritt
1 des Tutorials ausführlich beschrieben; in diesem Abschnitt
beschränken sich die Beschreibungen auf eine Kurzfassung.
Die zu erstellende Datei hat den Namen web.xml und ist im Verzeichnis 'WEB-INF'.
|
|
Die zu erstellende Datei hat den Namen web.xml und ist im Verzeichnis 'WEB-INF'.
|
|
Der Inhalt (XML-Anweisungen) ist unter Gesamter Code am Ende des Schrittes > Datei web.xml dokumentiert und kann in die geöffnete Datei kopiert werden.
Anschließend eine kurze Erklärung der XML-Elemente; wenn Ihre Zeit knapp ist können Sie die Erklärung auch überspringen und gleich mit dem Abschnitt Konfigurationsdatei faces-config.xml erstellen fortsetzen.
<?xml
version
=
"1.0"
encoding
=
"ISO-8859-1"
?>
Diese
Anweisung beschreibt welche Version von XML für die Struktur
verwendet wird und welcher Zeichensatz verwendet wird.
Diese
Anweisung ist für manche JAS (Java Application Server)
unbedingt erforderlich – für andere JAS könnten sie
weg gelassen werden.
Weil der letztendlich eingesetzte JAS zum
Zeitpunkt der Entwicklung nicht bekannt ist, ist diese Anweisung
erforderlich.
<web-app
...
>
Diese
Anweisung ist das Über-XML-Element für jene Anweisungen,
* die festlegen, welche Klasse für das Verarbeiten von
Web-Seiten mit JSF-Anweisungen verwendet wird
und
* die
festlegen, welche Dateinamenerweiterungen für Dateien mit
Web-Seiten verwendet werden.
Innerhalb dieses XML-Elements
sind zusätzliche Anweisungen:
<web-app
id
=
"JSFTutorial01c"
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"
>
Diese
Anweisungen sind für manche JAS (Java Application Server)
unbedingt erforderlich – für andere JAS könnten sie
weg gelassen werden.
Weil der letztendlich eingesetzte JAS zum
Zeitpunkt der Entwicklung nicht bekannt ist, sind diese Anweisungen
für den Echt-Betrieb erforderlich.
Nachfolgend ist eine ganz
kurze Beschreibung der Bedeutung dieser Anweisungen. Um
eventuelle kryptische Fehlermeldungen des JAS (welchen Sie auch
immer verwenden ;-) ) zu vermeiden empfehle ich, diese Vorlage genau
so in Ihre Datei zu kopieren – auch wenn Sie sich jetzt nicht
mit Details der Bedeutung belasten wollen.
Zum Zeitpunkt
(August 2009) des Schreibens dieses Dokuments können diese
Anweisungen leider nicht von allen JAS einheitlich verarbeitet
werden.
Z.B. sind bei JBoss Version 5.0.1 eigene Klassen
implementiert und die definierten Klassen werden nicht gefunden –
was zu einer Fehlermeldung führt.
Eine
für JBoss angepasste Datei 'web.xml' finden Sie im
Anhang.id
=
"JSFTutorial01c"
Diese
Identifikation ist eine zusätzliche Information, ähnlich
dem Wert im XML-Element <display-name>
.
An
manche JAS (z.B. Geronimo) können über weitere XML-Dateien
detailliertere Anweisungen zur Steuerung übergeben werden.
Die
Zuordnung zu den Basis-Anweisungen in dieser XML-Datei erfolgen dann
über diesen id
.
version
=
"2.4"
Hinweis,
welche Version der JSP (Java Server Pages) bzw. der JSF (Java Server
Faces) verwendet wird.
Damit kann schon beim Übergeben des
Archivs an den JAS ('deploy') geprüft werden, ob der JAS diese
Version überhaupt verarbeiten kann.
Damit können
Fehler, die erst während der Laufzeit auftreten, vermieden
werden.
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"
>
Spezifikation,
welche Klassen für die Verarbeitung der Anweisung für JSF
(Java Server Faces) erforderlich sind.
Damit kann schon beim
Übergeben des Archivs an den JAS ('deploy') geprüft
werden, ob der JAS die enthalten JSF-Anweisungen überhaupt
verarbeiten kann.
Damit können Fehler, die erst während
der Laufzeit auftreten, vermieden werden. Für
den JAS besteht aber keine Möglichkeit beim 'deploy' zu prüfen,
ob die Spezifikationen in dieser Datei auch mit den verwendeten JSP-
und JSF-Kommandos übereinstimmt !
<display-name>
In
diesem XML-Elementen wird ein beschreibender Name festgelegt.
Durch
diesen Namen kann bei einer Auflistung des Java Application Servers
(JAS) die Aufgabe des WAR oder EAR leichter erkannt werden.
Dieser
beschreibende Name hat keine weiteren Auswirkungen.
<servlet>
In
den untergeordneten XML-Elementen wird festgelegt, welche Klasse für
die Verarbeitung von Dateien mit Web-Seiten, die JSF-Anweisungen
enthalten, herangezogen wird.
<servlet-name>
JSFTutorial01
Faces Servlet
</servlet-name>
Diese
Anweisung legt einen symbolischen Namen fest, der verwendet wird,
wenn der im XML-Element <servlet-mapping>
definierten
Java-Klasse ein Dateinamensmuster zugeordnet wird.
<servlet-class>
javax.faces.webapp.FacesServlet
</servlet-class>
Namen
der Klasse, die dem symbolischen Namen zugeordnet ist.
In diesem
Tutorial wird die Klasse verwendet die von SUN in der Reference
Implementation vorgegeben ist und mit jedem JAS (Java Application
Server), der Java Server Faces verarbeiten kann, ausgeliefert
wird.
Durch diese Flexibilität ist es für
SpezialistInnen ist möglich, eigene Java-Klassen für die
Verarbeitung von Web-Seiten mit speziell entwickelten Anweisungen zu
verwenden.
<load-on-startup>
1
</load-on-startup>
Durch
den Wert '1' in diesem XML-Element wird der JAS angewiesen, beim
Starten sofort ein Objekt der im XML-Element <servlet-class>
festgelegten
Klasse zu konstruieren.
Damit wird die Verarbeitung von
Web-Seiten mit JSF-Anweisungen beschleunigt.
<servlet-mapping>
In
den untergeordneten XML-Elementen wird festgelegt, welche Dateien
mit welchen Java-Klassen verarbeitet werden.
Bei einem Fehler
innerhalb dieses XML-Elements tritt üblicherweise der unter
Mögliche
Fallstricke bei der Entwicklung von Anwendungen mit JSF (Java Server
Faces) > Kryptische Meldung beim Aufrufen der 'verlinkten'
Web-Seite
beschriebene
Fehler auf..
<servlet-name>
JSFTutorial01
Faces Servlet
</servlet-name>
Dieses
XML-Element ist die Verbindung zum XML-Element <servlet>
und
beschreibt gemeinsam mit diesem, welche Java-Klasse (des JAS) den
'Preprocessor' für die Verarbeitung der JSF-Anweisungen
enthält.
<url-pattern>
*.jsf
</url-pattern>
Diese
XML-Anweisung definiert ein Muster für die Dateien, die von der
im vorigen XML-Element (durch den symbolischen Namen) definierten
Java-Klasse verarbeitet werden.
In diesem Muster können
auch alle Dateien eines Verzeichnisses festgelegt werden (z.B.
<url-pattern>
JSFDirectory
/*
</url-pattern>
).
In
diesem Fall müssen aber alle Dateien die Anweisungen für
die zu verwendenden 'Preprocessors' enthalten – egal wie die
Endung der Datei ist (z.B. jsp
,
html
).
Konfigurationdatei
faces-config.xml
erstellen
Diese
Datei enthält folgende Anweisungen an den JAS
(Java-Application-Server):
Zuordnung
des in den JSF-Anweisungen (in der JSP-Datei; siehe Abschnitt
Erstellen
der JSP-Datei mit dem Dokument und integrierten JSF-Kommandos
)
verwendeten symbolischen Namens für die Java-Klassen (im
Beispiel:
SymbolicBeanName
)
zu der Java-Klasse (siehe Abschnitt
Erstellen
der Datei mit der Java-Klasse (
JSFTutorial01.java
)
).
Festlegen
von nachfolgend angezeigten Web-Seiten nachdem die Eingabe auf einer
Web-Seite verarbeitet wurde.
Der
Namen für die Datei ('faces-config.xml') und das Verzeichnis
('WEB-INF') – bitte auch die Groß- und Kleinschreibung
beachten – sind durch Normen vorgegeben und können nicht
verändert werden.
Das
Erstellen von Verzeichnissen und Dateien wurde im Schritt
1 des Tutorials ausführlich beschrieben; in diesem Abschnitt
beschränken sich die Beschreibungen auf eine Kurzfassung.
Die
zu erstellende Datei hat den Namen faces-config.xml
und
ist im Verzeichnis 'WEB-INF'.
|
|
Der Inhalt (XML-Anweisungen) ist unter Gesamter Code am Ende des Schrittes > Datei faces-config.xml dokumentiert und kann in die geöffnete Datei kopiert werden.
Anschließend eine kurze Erklärung der XML-Elemente; wenn Ihre Zeit knapp ist können Sie die Erklärung auch überspringen und gleich mit dem Abschnitt Erstellen der 'Packaging Configuration' für die Web-ARchive- (WAR-) Datei fortsetzen.
<faces-config
. . . . >
Diese
Anweisung ist das Über-XML-Element für alle Anweisungen,
* die Zuordnungen von Java-Klassen festlegen
und
* die
Abfolge von Web-Seiten steuern.
<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"
>
Innerhalb
von <faces-config
. . . . >
sind
weitere Spezifikationen für die Verarbeitung der in der Datei
page_step03.jsp
enthaltenen
Anweisungen für die 'Preprocessors' festgelegt.
Obwohl diese
Anweisungen auf Web-Sites verweisen werden Sie vom Java Application
Server (JAS) erkannt und interpretiert.
Eine detaillierte
Erklärung würde den Umfang dieses Tutorials bei weitem
überschreiten.
<managed-bean>
Innerhalb
dieses XML-Elements wird eine Java-Klasse zugeordnet.
Für
jede zugeordnete Java-Klasse ist ein <managed-bean>
-Element
erforderlich.
Detaillierte Anweisungen sind anschließend
beschrieben.
<managed-bean-name>
SymbolicBeanName
</managed-bean-name>
Diese
Anweisung legt den symbolischen Namen fest, der in den
JSF-Anweisungen (innerhalb einer Datei für eine Web-Seite)
verwendet wird wenn Methoden der zugeordneten Java-Klasse aufgerufen
werden.
Beispiel für eine JSF-Anweisung (aus der Datei
page_step03.jsp
):
<h3>Hallo
<h:outputText
value
="#{
SymbolicBeanName
.personName}"
/>
,
willkommen hier!
</h3><br>
Durch
die Einführung des symbolischen Namens (<managed-bean-name>
)
kann eine eventuell längere und schwer zu merkende Bezeichnung
für die Java-Klasse durch einen einfach zu merkenden und
aussagekräftigen Namen ersetzt werden,
<managed-bean-class>
js_jsf01.JSFTutorial01
</managed-bean-class>
Jene
Java-Klasse die dem symbolischen Namen () zugeordnet ist.
In
diesem Beispiel ist es die Klasse JSFTutorial01.java
(im
Java-package 'js_jsf01').
<managed-bean-scope>
request
</managed-bean-scope>
Hier
wird festgelegt, wie lange ein Objekt der Klasse
(JSFTutorial01.java
)
erhalten bleiben muss.
Mit request
wird
festgelegt, dass das Objekt nur für die Zeit zwischen dem
Aufruf einer Methode und deren Ende benötigt wird.
Weitere
mögliche Werte für dieses XML-Element sind session
und
application
.
<navigation-rule>
Innerhalb
dieses XML-Elements werden die Folgeseiten, die von den Ergebnissen
der aufgerufenen Methoden abhängen können,
festgelegt.
Detaillierte Anweisungen sind anschließend
beschrieben.
Für jede Web-Seite von der eine Folgeseite
aufgerufen werden kann, ist ein <navigation-rule>
-Element
erforderlich.
<from-view-id>
/page_step03.jsp
</from-view-id>
Hier
wird jene Web-Seite festgelegt, aus der die Methode aufgerufen wird,
deren Ergebnis die Folgeseite bestimmt.
Die XML-Elemente für
die Festlegung der Folgeseite sind anschließend
beschrieben.Möglicher
Stolperstein:
Für
den Wert des Dateinamens ist die komplette Verzeichnisstruktur
notwendig.
Wenn Dateien direkt im 'root'-Verzeichnis sind dann
ist ein häufiger Fehler, den führenden Delimiter '/' zu
vergessen.
Ein Beispiel für eine Datei in einem
Unterverzeichnis:
<from-view-id>
/
Verzeichnis
/
Unterverzeichnis
/page_step03.jsp
</from-view-id>
.
Mehr Dazu finden Sie unter Mögliche
Fallstricke bei der Entwicklung von Anwendungen mit JSF (Java Server
Faces) > Aufrufen der Folgeseite funktioniert nicht
.
<navigation-case>
Innerhalb
dieses XML-Elements ist eine Folgeseite definiert.
<from-outcome>
getDateTime
</from-outcome>
In
diesem XML-Element ist der Entscheidungswert definiert, bei dessen
Auftreten die im Element <to-view-id>
festgelegte
Folgeseite aufgerufen wird.
Üblicherweise wird
Entscheidungswert durch den Aufruf einer Methode der zugeordneten
Java-Klasse ermittelt.
Um diesen Schritt dieses Tutorials
nicht zu überfrachten wurde dieser Entscheidungswert fix in der
Datei page_step03.jsp
festgelegt;
und zwar in folgender Anweisung:
<h:commandButton
action
=
"getDateTime"
value
=
"Datum/Zeit
anzeigen"
/><br>
<to-view-id>
/page_step03.jsp
</to-view-id>
Datei
mit der Folgeseite, die aufgerufen wird wenn der im XML-Element
<from-outcome>
festgelegte
Entscheidungswert auftritt.
Dabei
ist der gleiche Stolperstein wie für
<from-view-id>
zu
beachten.
Genereller
Hinweis:
Im Beispiel dieses Schrittes ist die Folgeseite die
gleiche wie die aufrufende Seite.
Deswegen
ist in den XML-Elementen <from-view-id>
und
<to-view-id>
auch
die gleiche Datei enthalten.
Eine korrekte Definition innerhalb
des XML-Elementes ist aber notwendig, weil beim Anklicken des
<h:commandButton/>
die
jeweiligen Methoden der Java-Klasse (
JSFTutorial01.java
)
aufgerufen werden müssen.
Erweitern
der 'Packaging Configuration' für die Web-ARchive- (WAR-) Datei
Abhängig
von der installierten Version des JBoss-IDE
Plubins sind
die in diesem Abschnitt beschriebenen Konfigurationen
möglicherweise schon automatisch erstellt. |
Das
Erstellen der Konfiguration und das Packen wurde im Schritt
1 des Tutorials ausführlich beschrieben; in diesem Abschnitt
beschränken sich die Beschreibungen auf eine Kurzfassung der
möglicherweise zusätzlichen Konfigurationen.
Dieses
Verzeichnis in der Web-ARchive Datei enthält
Die
Dateien mit den kompilierten Klassen des Anwendungsprogramms und
Beschreibungs-Dateien
für die Ausführung im JAS.
Markieren Sie den Eintrag für die Web-Archive Datei und öffnen Sie durch einen Klick auf die rechte Maustaste das Kontext-Menu. Daraus wird New Folder ausgewählt. |
|
Im
neuen Fenster ('Create a folder') wird der Name des neuen
Verzeichnisses (WEB-INF)
festgelegt. |
|
Im Bereich 'Project archives' sehen Sie den neu erstellten Eintrag für das Verzeichnis. |
|
In
diesem Verzeichnis sind die Java-Klassen, die aus den
Java-Server-Pages aufgerufen werden, enthalten.
Markieren Sie den gerade erstellten Eintrag für das Verzeichnis 'WEB-INF' und öffnen Sie durch einen Klick auf die rechte Maustaste das Kontext-Menu. Daraus wird wieder New Folder ausgewählt. |
|
Im
neuen Fenster ('Create a folder') wird der Name des neuen
Verzeichnisses (classes)
festgelegt. (Ohne
Abbildung) |
|
Zu
packende Dateien für die Java-Klassen festlegen
Innerhalb
des Verzeichnisses 'classes' müssen jetzt die Java-Klassen, die
aus den Java-Server-Pages aufgerufen werden, festgelegt werden.
Markieren Sie den gerade erstellten Eintrag für das Verzeichnis 'classes' und öffnen Sie durch einen Klick auf die rechte Maustaste das Kontext-Menu. Daraus wird wieder New Fileset ausgewählt. |
|
Im neuen Fenster ('Fileset Wizard') wird zuerst festgelegt, in welchem Verzeichnis des Eclipse-Projects die vom Java-Compiler erstellten Dateien mit den Klassen enthalten sind. Dieses Verzeichnis wurde im Abschnitt 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) > Project in Eclipse eröffnen festgelegt. Zum Auswählen des Verzeichnisses wird die Schaltfläche [ Workspace... ] angeklickt. |
|
Im anschließend erscheinenden Fenster ('Select a destination') manövrieren Sie bitte innerhalb des Eclipse-Project zum Unterverzeichnis gen/classes und bestätigen Sie diese Auswahl durch Anklicken der Schaltfläche [ OK ]. Damit wird auch das Fenster wieder geschlossen. |
|
Sie sehen, dass im Bereich 'Previev' die im Abschnitt Erstellen der Datei mit der Java-Klasse (JSFTutorial01.java) erstellte Java-Klasse zu sehen ist; also in die Web-Archive Datei aufgenommen wird. Als
Vorbereitung für weiter fortgeschrittene Strukturen wird
jetzt noch festgelegt, dass ein kompletter Verzeichnisbaum mit
allen Dateien in die Archiv-Datei aufgenommen wird. Die
Eingaben werden durch Anklicken der Schaltfläche [ Finish ]
bestätigt. |
|
Im Bereich 'Project archives' sehen Sie den neu erstellten Eintrag für das Fileset. |
|
Zu
packende Konfigurationsdateien festlegen
Zur
Steuerung des JAS wurden in den Abschnitten
Konfigurationsdatei
web.xml
erstellen
und
Konfigurationsdatei
faces-config
erstellen
Konfigurationsdateien
erstellt.
Diese müssen ebenfalls 'an richtiger Stelle'
(innerhalb des Verzeichnisses 'WEB-INF') in die Archiv-Datei gepackt
werden.
Markieren Sie den Eintrag für das Verzeichnis 'WEB-INF' und öffnen Sie durch einen Klick auf die rechte Maustaste das Kontext-Menu. Daraus wird wieder New Fileset ausgewählt. |
|
Im neuen Fenster ('Fileset Wizard') wird zuerst festgelegt, in welchem Verzeichnis des Eclipse-Projects die Konfigurationsdateien enthalten sind. Zum Auswählen des Verzeichnisses wird die Schaltfläche [ Workspace... ] angeklickt. |
|
Im anschließend erscheinenden Fenster ('Select a destination') manövrieren Sie bitte innerhalb des Eclipse-Project zum Unterverzeichnis WebContent/Web-INF und bestätigen Sie diese Auswahl durch Anklicken der Schaltfläche [ OK ]. Damit wird auch das Fenster wieder geschlossen. |
|
Sie sehen, dass im Bereich 'Previev' die Konfigurationsdateien zu sehen sind; also in die Web-Archive Datei aufgenommen werden. Als
Vorbereitung für weiter fortgeschrittene Strukturen wird
jetzt noch festgelegt, dass ein kompletter Verzeichnisbaum mit
allen Dateien in die Archiv-Datei aufgenommen wird. Die
Eingaben werden durch Anklicken der Schaltfläche [ Finish ]
bestätigt. |
|
Im Bereich 'Project archives' sehen Sie den neu erstellten Eintrag für das Fileset. |
|
WAR-
(Web-ARchive) Datei erstellen
Zum erstellen der Web-ARchive Datei wird der Eintrag 'Java_JSF_01.war' markiert und durch einen Klick auf die rechte Maustaste das Kontext-Menu geöffnet. Daraus wird wieder Build Archive (Full) ausgewählt. |
|
'Deploy'
der WAR-Datei im Java Application Server (JAS) und Test
Eine
ausführliche Anleitung mit Screenshots für die Übergabe
der Archiv-Datei ('deploy') an verschiedene JAS finden Sie im Schritt
(
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
)
.
Möglicherweise
tritt bereits beim 'deploy' der Datei ein Fehler auf. Eine Anleitung zur Eingrenzung von möglichen Fehlern finden Sie im Abschnitt Hinweise zur Fehlersuche. |
Nach dem Aufruf der 'Anwendung' in einem Web-Browser wird das abgebildete Fenster angezeigt. Klicken Sie den Link zur Seite page_step03.jsp mit dem integrierten Java Code an um zur Seite mit dem integrierten Java Code zu gelangen. |
|
Als
Ergebnis sind jetzt (die variablen Werte) aktuelles Datum und
Uhrzeit und als Name 'FreundIn von JSF' zu sehen. |
|
Durch Eingabe eines Namens und Anklicken der Schaltfläche [ Datum/Zeit anzeigen ] wird der Begrüßungstext und Datum/Zeit aktualisiert. |
|
Konfigurationsdatei
application.xml
anpassen
Diese
Datei wurde bereits im vorigen Schritt des Tutorials (
Ergänzen
mit einer JSP-Datei und Packen in ein EAR (Enterprise-Archive) >
Konfigurationsdatei
application.xml
erstellen
)
erstellt
.
In
diesem Schritt wird nur die Referenz auf die WAR-Datei aktualisiert.
Der JAS erwartet die Datei 'application.xml' im Verzeichnis META INF. Zum Ändern wird die Datei zum Editieren geöffnet. |
|
In der Datei werden die markierten Teile angepasst:
<?xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<application>
<display-name>JavaScout
JSF-Tutorial 01, Schritt
3
</display-name>
<module>
<web>
<web-uri>Java_JSF_01.war
</web-uri>
<context-root>JSFTutorial01
c
</context-root>
</web>
</module></application>
'Packaging
Configuration' für die Enterprise-ARchive- (EAR-) Datei
Die
Konfiguration und das Packen ist gleich wie im vorigen Schritt des
Tutorials (
Ergänzen
mit einer JSP-Datei und Packen in ein EAR (Enterprise-Archive) >
Erstellen der 'Packaging Configuration' für die
Enterprise-ARchive- (EAR-) Datei
)
beschrieben; deswegen sind keine Änderungen notwendig.
'Deploy'
der EAR-Datei im Java Application Server (JAS) und Test
Eine
ausführliche Anleitung mit Screenshots finden Sie im vorigen
Schritt des Tutorials (
Tutorial:
Einfache Benutzeroberfläche mit JSF und Aufruf von Methoden
eines EJB (Java_JSF_01) – Ergänzen mit einer JSP-Datei und
Packen in ein EAR (Enterprise-Archive) > 'Deploy' der EAR-Datei im
Java Application Server (JAS) und Test
)
.
Beachten Sie bitte, dass bei Glassfish die Datei 'Java_JSF_01.war' 'undeployed' werden muss bevor die Datei 'Java_JSF_01.ear' 'deployed' werden kann !
Möglicherweise
tritt bereits beim 'deploy' der Datei ein Fehler auf. Eine Anleitung zur Eingrenzung von möglichen Fehlern finden Sie im Abschnitt Hinweise zur Fehlersuche. |
Das
im Web-Archive enthaltene 'Anwendungsprogramm' wird aufgerufen in
dem in einem Webbrowser URL die TCP/IP-Adresse (im Beispiel:
192.168.0.99),
der Port (Standardwert nach der Installation: 8080
für den Glassfish-JAS) und als 'Verzeichnis'
JSFTutorial01c
eingeben werden. Sie sehen die Startseite der in diesem Schritt erstellten Web-Anwendung. Klicken Sie den Link zur Seite page_step03.jsp mit dem integrierten Java Code an um zur Web-Seite mit den integrierten JSF- (Java Server Faces-) Kommandos zu gelangen. Der weitere Test verläuft wie im Abschnitt 'Dep Der weitere Test verläuft wie im Abschnitt 'Deploy' der WAR-Datei im Java Application Server (JAS) und Test beschrieben. |
|
Umbenennen
der EAR-Datei und neuerlicher Test
In
den folgenden Schritten des Tutorials wird dieses (Eclipse-)'Project'
weiterentwickelt und damit verändert.
Es ist sinnvoll, zu
einem späteren Zeitpunkt das Ergebnis dieses Tutorial-Schritts
wieder anzeigen zu können – z.B. um bei einer neuen
Version des JAS prüfen zu können, ob bestehende Beispiele
noch 'funktionieren' oder fehlerhaft verarbeitet werden.
Wenn der
Test der bisher erstellten Enterprise-Archiv-Datei erfolgreich war
wird diese Datei umbenannt. Damit kann Sie bei folgenden Schritten
nicht mehr überschrieben werden.
Das Umbenenen der Datei wird gestartet indem in Eclipse die Datei mit dem Web-Archiv mit der rechten Maustaste angeklickt wird. Aus dem angezeigten Kontext-Menu wird Refactor > Rename ausgewählt. |
|
Es
erscheint ein neues Fenster ('Rename Resource') in dem der neue
Dateiname festgelegt werden kann. |
|
Das
'deploy' ist abhängig vom verwendeten Java Application Server
(JAS).
Beschreibungen
mit Abbildungen finden Sie in vorhergegangenen Abschnitten dieses
Dokuments:
'Deploy'
bei JBoss
'Deploy'
bei Glassfish
Bei
beiden JAS muss die zuvor übergebene Enterprise-Archiv-Datei
'Java_JSF_01' wieder entfernt werden.
Grund dafür ist, dass
der in der Datei 'application.xml' festgelegte Wert im Element
<context-root>
(
JSFTutorial01b
)
nur einmal innerhalb eines JAS vorkommen darf
Bei
JBoss
erfolgt
das durch einfaches Löschen.
In
der Abbildung sind
/jboss_home
durch
/opt/jboss-5.1.0.GA
ersetzt.
Bei
Glassfish
erfolgt
das 'undeploy' analog dem unter
'Deploy'
bei Glassfish
beschriebenen
Ablauf.
Beim
Aufrufen des 'Anwendungsprogramms' muss wieder als
'Verzeichnis' JSFTutorial01c
eingeben werden. |
|
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 überhaupt keine
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_01c.war
Java_JSF_01c.ear Diese
Dateien wurden mit der JBoss
Version 5.0.1.GA und Glassfish
Version 2.1 getestet – für andere JAS kann leider keine
Garantie übernommen werden.
Beschreibungen
für das 'deploy' und das erwartete Ergebnis finden Sie in den
Abschnitten
'Deploy'
der WAR-Datei im Java Application Server (JAS) und Test
bzw.
'Deploy'
der EAR-Datei im Java Application Server (JAS) und 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_01b.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,
Wenn
die WAR-Datei fehlerfrei im JAS läuft – und die EAR-Datei
aber nicht, dann haben Sie vermutlich in den Abschnitten
Konfigurationsdatei
application.xml
erstellen
oder
Erstellen
der 'Packaging Configuration' für die Enterprise-Archive-
(EAR-) Datei
eine
Anweisung übersehen.
Vergleichen Sie wieder die Dateigrößen
mit der heruntergeladenen Datei und verwenden Sie bei Bedarf den
'Archive Manager'
Gesamter
Code am Ende des Schrittes
Zusätzlich zum Code in Schritt 2 wird jetzt auf den Schritt 3 des Tutorials verwiesen und ein 'Link' zur JSP-Datei mit den integrierten JSF-Kommandos hinzugefügt.
<html>
<head>
<title>JavaScout
:: Java-Server-Faces (JSF)
Tutorial
</title>
</head><body>
<h1>Willkommen
beim Schritt
3
des
Tutorials zur Verwendung von Java-Server-Faces (JSF) !
</h1>
<br>
Ziel
dieses Schrittes ist, Anweisungen f
ü
r
JSF (Java Server Faces) innerhalb des HTML-Codes zu platzieren.
Mit
diesen Anweisungen werden Daten von/zu einem Java-Objekt transferiert
und Methoden des Objekts ausgefü
hrt.
<br>
<br>
Das
ist die <i>
index.html
</i>
Datei.
<br>
<br>
<a
href
=
"sub_directory_1/sub_page_1.html"
>
Link
zur Seite
<i>
sub_page_1.html
</i>
im
Verzeichnis
<i>
sub_directory_1.html
</i>
.
</a><br>
<br>
<a
href
=
"sub_directory_2/sub_page_2.html"
>
Link
zur Seite
<i>
sub_page_2.html
</i>
im
Verzeichnis
<i>
sub_directory_2.html
</i>
.
</a><br>
<br><a
href
=
"page_step02.jsp"
>
Link
zur Seite
<i>
page_step02.jsp
</i>
mit
dem integrierten Java-Code.
</a>
<br>
<br><a
href
=
"page_step03.jsf"
>
Link
zur Seite
<i>
page_step03.jsp
</i>
mit
Anweisungen f
ü
r
JSF (Java Server Faces).
</a><br>
<b>
Bitte
beachten:
</b><br>
Die
in der Referenz zum Link angegebene Dateierweiterung muss <b>
.jsf
</b>
sein,
auch wenn die Dateierweiterung der Datei .js
<b>
p
</b>
ist.
</body></html>
<%@
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 / Schritt
3
</title>
</head><body>
<h1>Willkommen
beim Schritt 3 des Tutorials zur Verwendung von Java-Server-Faces
(JSF) !
</h1><br>
<br>
Ziel
dieses Schrittes ist, Anweisungen f
ü
r
JSF (Java-Server-Faces)
<br>
in
der Java-Server-Page- (JSP-) Datei zu
integrieren.
<br>
<br>
Diese
JSF-Anweisungen bewirken, dass der eingegebene Name durch die
passende Methode
<br>
der
zugehörigen Java-Klasse verarbeitet wird und das Ergebnis in den
entsprechenden Feldern
<br>
angezeigt
wird.
<br>
<br>
Das
ist die
<i><b>
page_step03.jsp
</b></i>
Datei.
<br>
<br>
<h:form
id
=
"Step03Form"
>
Ihr
Name:
<h:inputText
id
=
"Name"
value
="#{SymbolicBeanName.personName}"
/><br>
<h:commandButton
action
=
"getDateTime"
value
=
"Datum/Zeit
anzeigen"
/><br>
</h:form>
<br>
<h3>Hallo
<h:outputText
value
="#{SymbolicBeanName.personName}"
/>
,
willkommen hier!
</h3><br>
<br>
<font
color="blue">Aktuelles
Datum und Zeit des Servers ist:
<br>
<h:outputText
value
="#{SymbolicBeanName.dateTimeFormatted}"
/>.
</font><br>
<br>
<a
href
=
"index.html"
>
Zur
ü
ck
zum Inhaltsverzeichnis durch Anklicken dieser
Zeile.
</a>
</body>
</html>
</f:view>
package
js_jsf01;
/*
* package
util enthält die Klasse für internes Datum und Zeit.
*/import
java.util.*;
/*
* package
und Klasse für sprachabhängige Anzeige von Datum und Zeit.
*/import
java.text.DateFormat;
/*
* Deklaration
der Klasse; diese muss 'public' sein sonst
* können
die Methoden der JSF-Klassen nicht darauf zugreifen. */public
class
JSFTutorial01
{
/*
* Deklaration
der Variablen für den Namen 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
Name
=
"FreundIn
von JSF"
;
/*
* Deklaration
der Variablen für die Anzeige von Datum und Zeit. */
private
String
DateTimeFormattiert
;
/*
* Methode
zum Übertragen des auf der Web-Seite eingegebenen Namens in die
Variable dieser Klasse. */
public
void
setPersonName(String
parmName) {
Name
=
parmName;
}
/*
* Methode
zum Übertragen des Namens in der Variable dieser Klasse auf das
passende Feld der Web-Seite. */
public
String
getPersonName() {
return
Name
;
}
/*
* Methode
zum Übertragen der Zeichenkette mit Datum und Zeit in der
Variable dieser
* Klasse auf das passende Feld der
Web-Seite.
* Vor dem 'zurückliefern' der
Zeichenkette wird der aktuelle Wert ermittelt und passend
formattiert.
*
* Dieser Wert wird nur
vom Objekt dieser Klasse auf das passende Feld der Web-Seite
übertragen -
* deswegen ist keine zugehörige
'set'-Methode definiert. */
public
String
getDateTimeFormatted() {
/*
* 'Holen'
der aktuellen Zeit vom Computer auf dem der Java Application Server
(JAS) ausgeführt wird. */
Date
DateTimeNow = new
Date();
/*
* Bilden
einer Zeichenkette mit Datum und Zeit in dem in Deutsch üblichen
Format.
* Dabei werden Datum und Zeit in der längsten
möglichen Form (mit der meisten Information) angezeigt.
*/
DateTimeFormattiert
=
DateFormat.getDateTimeInstance(
DateFormat.FULL
,
DateFormat.
LONG
,
Locale.
GERMAN
).format(DateTimeNow);
/*
* 'Zurückliefern'
der Zeichenkette mit formatiertem Datum und Zeit. */
return
DateTimeFormattiert
;
}
}
<?xml
version
=
"1.0"
encoding
=
"ISO-8859-1"
?>
<web-app
id
=
"JSFTutorial01c"
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 Step
03
</display-name>
<servlet>
<servlet-name>JSFTutorial01
Faces
Servlet
</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet
</servlet-class>
<load-on-startup>1
</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>JSFTutorial01
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
=
"JSFTutorial01c"
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 Step
03
</display-name>
<servlet>
<servlet-name>JSFTutorial01
Faces
Servlet
</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet
</servlet-class>
<load-on-startup>1
</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>JSFTutorial01
Faces
Servlet
</servlet-name>
<url-pattern>*.jsf
</url-pattern>
</servlet-mapping></web-app>
<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_jsf01.JSFTutorial01
</managed-bean-class>
<managed-bean-scope>request
</managed-bean-scope>
</managed-bean>
<navigation-rule>
<from-view-id>/page_step03.jsp
</from-view-id>
<navigation-case>
<from-outcome>getDateTime
</from-outcome>
<to-view-id>/page_step03.jsp
</to-view-id>
</navigation-case>
</navigation-rule></faces-config>
<?xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<application>
<display-name>JavaScout
JSF-Tutorial 01, Schritt
3
</display-name>
<module>
<web>
<web-uri>Java_JSF_01.war
</web-uri>
<context-root>JSFTutorial01c
</context-root>
</web>
</module></application>
Dokument |
Inhalt |
Im
nächsten Schritt des Tutorials werden abhängig von der
Uhrzeit verschiedene Web-Seiten als Folgeseiten nach der Seite mit
der Eingabe aufgerufen. |