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:
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)
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
page1.jsp
Hier die Config-Files:
faces-config.xml
web.xml
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).
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: