[RichFaces] Applikation wird mit NullPointerException beendet

Status
Nicht offen für weitere Antworten.

LinuxDjihad

Mitglied
Hallo,

ich möchte eine Rich-Faces-Applikation aus einem Tutorial (RichFaces Developer Guide) testen, da ich bald beruflich zu tun habe und ich mich schon mal vorab damit beschäftigen will. Dummerweise bekomme ich das Ding einfach nicht zum Laufen. Der Versuch, die Applikation zu laden, endet mit folgendem Fehler:

Java:
java.lang.NullPointerException
	java.lang.String.startsWith(String.java:1421)
	java.lang.String.startsWith(String.java:1450)
	org.ajax4jsf.webapp.WebXml.getFacesResourceKey(WebXml.java:189)
	org.ajax4jsf.webapp.WebXml.getFacesResourceKey(WebXml.java:222)
	org.ajax4jsf.resource.InternetResourceService.serviceResource(InternetResourceService.java:139)
	org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:508)

Die Applikation ist jene aus dem Tutorial. Dabei verstehe ich eines sowieso nicht. In jedem Tutorial wird nie davon gesprochen, dass man von einer JSP-Index-Seite auf die eigentlich JSF-Startseite umleiten muss. Ohne diese Umleitung habe ich eine JSF-Site aber noch nie zum Laufen bekommen. Wieso wird da nie darauf hingewiesen?

Zum eigentlichen Problem und hier mal der von mir verwendete Quellcode:

src->demo [package]
(Hier hielt man sich nicht an die Java-Konvention, aber ich habe es derweil so adaptiert, denn die Groß- und Kleinschreibung bei Beans in Config-Files und in der Verwendung ist ja auch wieder so eine eigene Sache. Ich wollte zur Fehlervermeidung das Bsp. aus dem Tutorial nicht ändern)

Java:
package demo;

public class user {

	   private String name="";

	   public String getName() {
	      return name;
	   }

	   public void setName(String name) {
	      this.name = name;
	   }
}

index.jsp
Hier habe ich diese Umleitung eingebaut, von der ich sprach. Übrigens würde ein <jsp:forward> anstatt http-equiv dazu führen, dass der Server in eine Endlosschleife mit kontinuierlich produzierenden Fehlermeldungen gerät! Dies ist aber nur bei dieser Applikation so. Bei normalen JSF-Seiten habe ich das Problem nicht. Das Verzeichnis "faces" gibt es zwar nicht, aber durch das Mapping findet Tomcat üblicherweise das File. Wie gesagt, mir ist nicht klar, warum man die JSF-Seite (in dem Fall die RichFaces-Seite) nicht direkt ansteuern kann. Immerhin bleibt der Server nicht mehr in einer Endlossschleife hängen. Diese Teillösung habe ich von dieser Seite: Nabble - MyFaces - Users - faces forewarding

Java:
<?xml version="1.0" encoding="UTF-8" ?>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Insert title here</title>
</head>
<body>
<jsp:forward page="faces/page1.jsp" />
</body>
</html>

page1.jsp
Java:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="f"  uri="http://java.sun.com/jsf/core"%>
<%@ taglib prefix="h"  uri="http://java.sun.com/jsf/html"%>
<!-- RichFaces tag library declaration -->
<%@ taglib uri="http://richfaces.org/a4j" prefix="a4j"%>
<%@ taglib uri="http://richfaces.org/rich" prefix="rich"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
      <head>
            <title>RichFaces Greeter</title>
      </head>
      <body>
            <f:view>
                  <a4j:form>
                        <rich:panel header="RichFaces Greeter" style="width: 315px">
                              <h:outputText value="Your name: " />
                              <h:inputText value="#{user.name}" >
                                    <f:validateLength minimum="1" maximum="30" />
                              </h:inputText>                        
                              <a4j:commandButton value="Get greeting" reRender="greeting" />
                              <h:panelGroup id="greeting" >
                                    <h:outputText value="Hello, " rendered="#{not empty user.name}" />
                                    <h:outputText value="#{user.name}" />
                                    <h:outputText value="!" rendered="#{not empty user.name}" />
                              </h:panelGroup>
                        </rich:panel>
                  </a4j:form>
            </f:view>
      </body>
</html>

Hier die Config-Files:
faces-config.xml

Java:
<?xml version="1.0" encoding="UTF-8"?>

<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>
      <description>UsernName Bean</description>
      <managed-bean-name>user</managed-bean-name>
      <managed-bean-class>demo.user</managed-bean-class>
      <managed-bean-scope>request</managed-bean-scope>
      <managed-property>
         <property-name>name</property-name>
         <property-class>java.lang.String</property-class>
         <value/>
      </managed-property>
   </managed-bean>
</faces-config>

web.xml
Java:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>RichFacesGreeter</display-name>
<!-- <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list> -->
  <servlet>
    <servlet-name>FacesServlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>FacesServlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
    <url-pattern>*.jsf</url-pattern>
  </servlet-mapping>
  
  <login-config>
   <auth-method>BASIC</auth-method>
   </login-config>
  <!-- Plugging the "Blue Sky" skin into the project -->
<context-param>
   <param-name>org.richfaces.SKIN</param-name>
   <param-value>blueSky</param-value>
</context-param>
<!-- Making the RichFaces skin spread to standard HTML controls -->
<context-param>
      <param-name>org.richfaces.CONTROL_SKINNING</param-name>
      <param-value>enable</param-value>
</context-param>
<!-- Defining and mapping the RichFaces filter -->
<filter> 
   <display-name>RichFaces Filter</display-name> 
   <filter-name>richfaces</filter-name> 
   <filter-class>org.ajax4jsf.Filter</filter-class> 
</filter> 
<filter-mapping> 
   <filter-name>richfaces</filter-name> 
   <servlet-name>FacesServlet</servlet-name>
   <dispatcher>REQUEST</dispatcher>
   <dispatcher>FORWARD</dispatcher>
   <dispatcher>INCLUDE</dispatcher>
</filter-mapping>
</web-app>


Im lib-Verzeichnis des Projekts befinden sich folgende JARs:
commons-beanutils-1.8.1-javadoc.jar
commons-beanutils-1.8.1-sources.jar
commons-beanutils-1.8.1.jar
commons-beanutils-bean-collections-1.8.1.jar
commons-beanutils-core-1.8.1.jar
commons-collections-3.2.1-javadoc.jar
commons-collections-3.2.1-sources.jar
commons-collections-3.2.1.jar
commons-collections-testframework-3.2.1.jar
commons-digester-2.0-javadoc.jar
commons-digester-2.0-sources.jar
commons-digester-2.0.jar
commons-logging-1.1.1-javadoc.jar
commons-logging-1.1.1-sources.jar
commons-logging-1.1.1.jar
commons-logging-adapters-1.1.1.jar
commons-logging-api-1.1.1.jar
commons-logging-tests.jar
jsf-api.jar
jsf-impl.jar
jstl.jar
richfaces-api-3.3.2.SR1.jar
richfaces-impl-3.3.2.SR1.jar
richfaces-ui-3.3.2.SR1.jar

Übrigens finde ich es auch erstaunlich, dass ich bisher keine JSF-Applikation zum Laufen bekommen habe, wenn ich anstatt des Hineinkopieren sämtlicher JARs nach lib diese JARs im Projekt nur als externe JARs verlinkt habe. Auch von diesem Phänomen wird in keinem Tutorial etwas erwähnt.

Ich hoffe, dass mir jemand dabei helfen kann den Fehler zu finden, damit ich weiß, was da alles schief läuft.

Als Entwicklungsumgebung verwende ich Eclipse (Ganymede, aber aktualisiere gerade auf die neue Version).
 
Zuletzt bearbeitet:

LinuxDjihad

Mitglied
Aus irgend einem Grund scheint es an der Umleitung zu liegen. Wenn ich in der Config das Servlet-Mapping zu folgendem ändere...
Java:
<url-pattern>*.faces</url-pattern>

und die jsp-Seite im Browser anstatt mit page1.jsp mit page1.faces aufrufe, funktioniert die ganze Sache offensichtlich. Da stellt sich mir die Frage, wieso die Applikation weiß, dass sie page1.jsp aufrufen soll, wobei doch nirgendwo eine Weiterleitung von *.faces auf *.jsp deklariert wird? Kann mir jemand erklären, warum das funktioniert?
 

LinuxDjihad

Mitglied
Weiters wäre auch interessant zu wissen, wieso der Submit-Button keine Reaktion hervorruft. Die Applikation startet, wie gesagt, zwar aber sie funktioniert offensichtlich nicht richtig.
 

bronks

Top Contributor
... Übrigens finde ich es auch erstaunlich, dass ich bisher keine JSF-Applikation zum Laufen bekommen habe, wenn ich anstatt des Hineinkopieren sämtlicher JARs nach lib diese JARs im Projekt nur als externe JARs verlinkt habe. Auch von diesem Phänomen wird in keinem Tutorial etwas erwähnt.

... Eclipse ...
Das ist eine ausschließliche Macke von Eclipse, die schon seit Ewigkeiten bekannt ist, aber wenn man danach frägt, dann weiß niemand etwas davon.

Kannst ja gerne hier (http://www.java-forum.org/ides-tools/90332-paar-fragen-eclipseee3-5-a.html) noch danach fragen und was dazu schreiben.

Um seine erste HelloWorldApp mit JSF auf Tomcat zum laufen zu bringen braucht man mit Eclipse Stunden, wenn nicht gleich Tage. Einem Anfänger, der MicroSofts Visual Studio und .NET noch nie gesehen hat gebe ich maximal 5 Minuten, um eine WebApp zu bauen, die der von Dir o.g. entspricht.
 

bronks

Top Contributor
Sorry hab fast vergessen zu erwähnen: Umgehen kann man das o.g. Problem wenn man in den Eigenschaften für Tomcat angibt "Use Tomcat installation ... ..."

Aber es bleibt dabei: Die Defaulteinstellungen sind nichtfunktionierender Schrott.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Zugang zur List elementen (richfaces) Web Tier 1
G GWT oder RichFaces oder ... Web Tier 5
J JSF Grad der Barrierefreiheit von PrimeFaces, ICEFaces, RichFaces und OpenFaces Web Tier 2
K RichFaces CommandButton mit PopUp verwenden Web Tier 2
M RichFaces zerstörte mein Projekt Web Tier 4
D JSF RichFaces Tree-Beispiel Problem Web Tier 2
F RichFaces Override CSS Web Tier 4
T RichFaces will nicht funktionieren :( Web Tier 2
T RichFaces einbinden Web Tier 4
N JSF [Maven] Seam 2.2, Richfaces 3.3 - a4j wird nicht umgewandelt Web Tier 6
T JSF Simple Anwendung mit Richfaces Web Tier 7
S Richfaces 4.0 Ajax Waitingpanel Web Tier 2
J JSF Richfaces Tabs, dynamisches include funktioniert nicht Web Tier 4
S Richfaces: Column ReRender Web Tier 4
G JSF Richfaces rich:messages Web Tier 13
M JSF Richfaces 2 Kalender kombinieren Web Tier 4
K RichFaces Geschwindigkeit bei Tabellen Web Tier 3
T JSF/Richfaces rich:dataTable with rich:datascroller Web Tier 1
H Richfaces - Taglib Problem gelb unterstrichen Ajax Output Web Tier 6
E JSF 2.0 Wie Richfaces in Eclipse einbinden? Web Tier 25
M Frage zur Konfiguration einer RichFaces DataTable Web Tier 4
I JSF 2.0 und RICHFACES/ ICEFACES oder ähnliches? Web Tier 6
B Probleme mit RichFaces Web Tier 2
B Richfaces 3.3.2.SR1 --- Kompatibilität Web Tier 3
N Richfaces + AjaxValidator Web Tier 3
T richfaces + jsf Web Tier 3
W RichFaces converter in orderingList wirft exception Web Tier 5
V Image Map und Ajax-Richfaces Web Tier 5
J Richfaces combobox zeigt Items nicht an Web Tier 4
P Richfaces/Seam: RichShuttleListe funktioniert nicht Web Tier 8
N oncomplete bei Richfaces Web Tier 3
D Richfaces (Seam/Hibernate): dynamische Eingabefelder Web Tier 2
D Eventing in Kombination mit RichFaces bzw. Element.show() Web Tier 2
F Richfaces livedemo Web Tier 1
F RichFaces, Problem mit PickList Web Tier 2
T richfaces datatable Web Tier 3
C RichFaces Ajax ReRender funktioniert nicht. Web Tier 2
S richfaces Datatable horizontal ausgeben Web Tier 2
F RichFaces: JSF-Lifecycle / Validierung Web Tier 2
E RichFaces 3.2.1 Probleme Web Tier 4
F nach Update auf RichFaces 3.2.0 Fehlermeldungen Web Tier 5
S JSF Versionschaos (?) bei JSF in bestehender Applikation Web Tier 0
J JSP Web Applikation auf virtuellem Tomcat Server Web Tier 1
P JSF Eine JSF-Applikation in Drupal darstellen - Möglich? Web Tier 5
G Kommunikation Servlet + Applikation Web Tier 4
W JSP/Servlet Web Applikation programmierung Web Tier 9
E JSF Applikation läuft nicht über Tomcat Web Tier 3
L Set<T> Attribut eines Objektes wird zu null in thymeleaf Web Tier 2
C JSP data wird nicht angezeigt Web Tier 6
jann Servlet Bei jedem Request wird eine neue Session erstellt. Web Tier 6
P JSF (Primefaces) SelectOneMenu Value auf Array wird nicht gesetzt Web Tier 0
W Tabelle wird nicht aktualisiert Web Tier 8
A JSF String wird nicht angezeigt Web Tier 2
S JSF CSS wird gefunden aber inhaltlich nicht angewendet Web Tier 2
R get-methode der Managed-Bean wird immer 3 mal ausgeführt Web Tier 4
R JSF ManagedProperty wird nicht erstellt Web Tier 1
G JSF Radio Button ValueChangeListener Wert wird nicht übernommen Web Tier 2
M fileUploadListener geht nicht wenn Element zur Laufzeit gerendert wird Web Tier 2
T JSF Primefaces beim öffnen eines p:dialog wird eine neue View ManagedBean erstellt Web Tier 2
nrg Java-Code in Taglib wird nicht richtig ausgeführt. Web Tier 7
F JSF CSS Verschachtelung wird nicht abgebildet Web Tier 2
F.S.WhiTeY Servlet Servlet wird nicht angesprochen Web Tier 3
D JSF a4j:support wird nicht gefunden Web Tier 2
H JSP, Eclipse, Tomcat - Java Klasse wird nicht gefunden Web Tier 8
T JSF wird nicht ausgeführt Web Tier 4
aze JSF CommandButton:Action wird nicht ausgeführt Web Tier 2
H JSF ActionListener wird ausgeführt, aber ändert den Wert nicht. Web Tier 7
L JSF Beispiel wird nicht ausgeführt Web Tier 2
T JSF Eigener Converter wird nur für Eingabekomponenten aufgerufen? Web Tier 3
M JSF Button - Methode wird nicht aufgerufen Web Tier 4
L einfache JSF-Seite wird nicht angezeigt Web Tier 8
B JSF HtmlCommandButton --- Action wird nicht aufgerufen Web Tier 2
P JSF AJAX render wird nicht ausgeführt Web Tier 4
X Seite wird mit AJAX neu geladen Web Tier 4
P Servlet wird nicht gefunden - HTTP Error 503 Web Tier 7
S JSF Primefaces Thema, Css wird geladen, nur die Bilder nicht, bzw Resource wird nicht aufgelöst Web Tier 5
borobudur Servlet Business-Logik wird bei jedem Request neu erstellt Web Tier 13
J JSF JSF2.0 template wird nicht gerendert!? Web Tier 2
C GWT: RPC wird nicht gefunden Web Tier 3
I Beim zurück-Link wird immer ein Request ausgeführt Web Tier 5
E JSP ist es noch aktuell oder wird heute was anderes genutzt? Web Tier 3
D [JSF] Lifecycle Methode wird mehrfach aufgerufen Web Tier 4
J JSF Custom Component ValueExpression wird nur als String erkannt Web Tier 2
E init() wird mehrmals aufgerufen Web Tier 4
E CSS wird nach RequestDispatcher.redirect nicht mehr geladen Web Tier 7
V JSF: dataTable Getter wird nie aufgerufen Web Tier 6
megachucky JSF - JSTL Library wird nicht gefunden Web Tier 4
Z Servlet Response HTTP-Status 200 wird nicht übertragen Web Tier 3
K [gelöst] JSF-Seite wird nicht angezeigt Web Tier 3
H JSF Seite wird plain angezeigt Web Tier 3
N URL bei WebApp wird immer laenger Web Tier 5
G JSP/JSF Inputtext rerender wenn Value geändert wird Web Tier 2
I servlet: init wird auch nach ServletException aufgerufen Web Tier 3

Ähnliche Java Themen

Neue Themen


Oben