> Inhalt: Entwickeln von Web-Anwendungen mit Java-Server-Faces 

Theorie und sonstige Themen 

Mögliche Fallstricke bei der Entwicklung von Anwendungen mit JSF (Java Server Faces)

* Bitte beachten Sie die Hinweise und Bestimmungen bezüglich Urheberrecht, Haftungsausschluß und geschützte Marken oder Warenzeichen die für dieses Web-Dokument und möglicherweise auch für 'verlinkte' Dokumente gelten.

  • Der Betreiber dieser Web-Site (www.javascout.biz) ist nicht verantwortlich für den Inhalt von Web-Sites, die innerhalb dieses Web-Dokumentes oder anderer Dokumente von www.javascout.biz verlinkt sind.

  • Wenn dieses Web-Dokument oder andere Dokumente dieser Web-Site (www.javascout.biz) Rechte von Ihnen verletzen, oder sie glauben, daß Rechte Anderer (Dritter Personen) dadurch verletzt werden, informieren Sie bitte den Betreiber dieser Web-Site.
    Eine E-Mail können Sie ganz einfach durch anklicken des Symbols oder Textes im Frame rechts oben senden.

Dieses Dokument drucken.

 Letzte Bearbeitung dieses  Dokuments:
2009-01-17


Voraussetzungen für das Verständnis dieses Dokuments:

Keine.
Dieses Dokument ist eine Sammlung von möglichen Fehlern die leicht passieren können und schwer zu finden sind..

Ungefährer Zeitbedarf zum Durcharbeiten dieses Dokuments:

Dieses Dokument ist eine Sammlung von möglichen Fehlern und Hinweisen zu deren Behebung.
Die notwendige Zeit für das Identifizieren eines Fehlers und dessen Behebung ist sehr individuell.
Aus diesem Grund werden keine Richtwerte für den Zeitaufwand gegeben
.

'Verwöhnt' durch die sofortige Syntaxprüfung beim Codieren von Java in Eclipse ist das Codieren von JSF für mich am Anfang eine Quelle von Frust.

Nicht nur Tippfehler sondern auch gewöhnungsbedürftige Konventionen für die Verwendung von 'Properties' (Werten) in den Web-Seiten sind für den Anfang nicht leicht zu findende Ursache für kryptische Fehlermeldungen und nicht gewünschte Ergebnisse.

Inhaltsverzeichnis:

Auswirkung(en)

Möglicher Fehler

Kryptische Meldung beim Aufrufen der verlinkten Web-Seite.  [Detailbeschreibung]

Die Referenz des Links (<a href="xxxx.jsf") zu einer Datei mit JSF-Anweisungen muss die Dateierweiterung '.jsf' haben obwohl die Erweiterung der Datei '.jsp' ist..  [Detailbeschreibung]

Aufrufen der Folgeseite funktioniert nicht.  [Detailbeschreibung]

In der Datei 'faces-config.xml' sind Tippfehler im XML-Element <navigation-rule>.  [Detailbeschreibung]

Fehlermeldung "Property 'xxx' not found on type package.class" beim Aufrufen einer Seite.  [Detailbeschreibung]

In JSF bestehen sehr strikte Namenskonventionen für die 'Properties' in einer Web-Seite und den zugehörigen get- und set-Methoden.  [Detailbeschreibung]


Kryptische Meldung beim Aufrufen der 'verlinkten' Web-Seite

Wenn eine Web-Seite aufgerufen wird erscheint folgende Fehlermeldung (Ausschnitt):

Diese Meldung scheint anzuzeigen, dass innerhalb des Bereiches mit den JSF-Anweisungen ein Fehler existiert.
Mit hoher Wahrscheinlichkeit wurde aber beim Erstellen des 'Links' in der aufrufenden Seite als Referenz der 'wirkliche' Dateiname – mit der Dateinamenerweiterung '.jsp' – verwendet.

Hintergrundinformation:
Wenn innerhalb einer Web-Site (mehrere Dateien mit Web-Seiten, die innerhalb der gleichen Datei mit dem Web-Archive (WAR) gepackt sind) auch Dateien mit Anweisungen für 'Java-Server-Pages' (JSP) enthalten sind, dann würde durch die Verarbeitung von JSF-Anweisungen bei den JSP-Dateien ein Fehler auftreten.
Ist kompliziert zu Beschreiben – probieren Sie es aber einmal aus !

Um Dateien mit JSF-Anweisungen von Dateien mit JSP-Anweisungen unterscheiden zu können wird in der Konfigurationsdatei 'web.xml' (im Verzeichnis 'WEB-INF') festgelegt, dass die Klassen für die Verarbeitung von JSF-Anweisungen nur Dateien mit der Dateinamenerweiterung '.jsf' verarbeiten.
Das ist im XML-Element
<servlet-mapping>
 
  <servlet-name>Faces Servlet</servlet-name>
   <url-pattern>*.jsf</url-pattern>
</servlet-mapping>
festgelegt.

Eine Eigenheit dieser XML-Konfiguration zur Verarbeitung von JSF-Anweisungen ist dann aber, dass bei einem Link die Dateinamenerweiterung '.jsf' erwartet wird – auch wenn die Datei mit der anzuzeigenden Web-Seite (und den inkludierten JSF-Anweisungen) die Dateinamenserweiterung '.jsp' hat.

Falschin diesem Beispiel hat die Referenz für den Link die Dateinamenerweiterung jsp :
<a href="page_step03.jsp">Link zum Dokument in der Datei 'page_step03.jsp.</a>

Richtigin diesem Beispiel hat die Referenz für den Link die Dateinamenerweiterung jsf :
<a
href="page_step03.jsf">Link zum Dokument in der Datei 'page_step03.jsp.</a>

zum Inhaltsverzeichnis

Aufrufen der Folgeseite funktioniert nicht

Welche Folgeseite aufgerufen wird ist abhängig von der 'action' (dem Ergebnis einer Verarbeitung der erfassten Daten).
Der Zusammenhang zwischen den Dateien mit den jeweiligen Web-Seiten und der 'action' ist in der Datei 'faces-config.xml' festgelegt und zwar im XML-Element <navigation-rule>.

In den XML-Elementen <from-view-id> und <to-view-id> (für die Dateien mit den Web-Seiten) ist die komplette Verzeichnisstruktur vor dem Dateinamen erforderlich – auch wenn die Datei mit der Folgeseite im gleichen Verzeichnis ist.

Richtig:
<navigation-rule>
  <from-view-id>
/shop/de/payment1.jsp</from-view-id>
  <navigation-case>
    <from-outcome>
success</from-outcome>
    <to-view-id>
/shop/de/payment2.jsp</to-view-id>
  </navigation-case>
</navigation-rule>

Falsch (ohne vollständige Verzeichnisstruktur):
<navigation-rule>
  <from-view-id>
payment1.jsp</from-view-id>
  <navigation-case>
    <from-outcome>
success</from-outcome>
    <to-view-id>
payment2.jsp</to-view-id>
  </navigation-case>
</navigation-rule>

Auch wenn die Dateien mit den Web-Seiten direkt im 'root'-Verzeichnis liegen ist das durch den Verzeichnis-Trenner (/) anzugeben:
<navigation-rule>
  <from-view-id>
/payment1.jsp</from-view-id>
  <navigation-case>
    <from-outcome>
success</from-outcome>
    <to-view-id>
/payment2.jsp</to-view-id>
  </navigation-case>
</navigation-rule>

zum Inhaltsverzeichnis

Fehlermeldung "Property 'xxx' not found on type package.class" beim Aufrufen einer Seite

Wenn eine Web-Seite aufgerufen wird erscheint folgende Fehlermeldung (Ausschnitt):

Das bedeutet, dass die JSF-Anweisung (Beispiel PersonName) nicht den Namenskonventionen entspricht oder
keine entsprechende get- und/oder set- Methode (für das Beispiel: getPersonName() bzw. setPersonName(...) vorhanden ist.

Wahrscheinlich wurde bei der Namensgebung der 'Property' oder den get- und set- Methoden nicht beachtet, dass das JSF-Framework sehr strikte Namenskonventionen verlangt.

Konvention für das Verbinden von 'Properties' in JSF-Anweisungen mit den zugehörigen get- und set-Methoden der Java-Klasse:


zum Inhaltsverzeichnis

Keine get-Methode für eine JSF-Anweisung inputText

Auch wenn der Wert einer Eingabe nach der Verarbeitung nicht wieder angezeigt werden soll ist eine passende get-Methode notwendig.

Die JSF-Anweisung
<h:inputText id="name" value="#{PersonBeanForJSF.personName}"/>

benötigt folgende Methoden in der zugehörigen Java-Klasse:
  public String getpersonName() {
  . . . . .
  . . . . .

und (selbstverständlich)
  public String setpersonName() {
  . . . . .
  . . . . .

zum Inhaltsverzeichnis

Muster

asdf.

zum Inhaltsverzeichnis