JSF : Je craque
Le
Zouplaz
Bonjour, je suis en train de me battre avec les JSF et pour l'instant je
perds !!
Je n'obtiens que des erreurs de runtime, la dernière en date étant :
java.lang.NullPointerException
javax.faces.webapp.FacesServlet.init(FacesServlet.java:144)
org.apache.catalina.valves.ErrorReportValve.invoke
(ErrorReportValve.java:164)
org.apache.coyote.tomcat5.CoyoteAdapter.service
(CoyoteAdapter.java:206)
org.apache.coyote.http11.Http11Processor.process
(Http11Processor.java:833)
org.apache.coyote.http11.Http11Protocol
$Http11ConnectionHandler.processConnection(Http11Protocol.java:732)
org.apache.tomcat.util.net.TcpWorkerThread.runIt
(PoolTcpEndpoint.java:619)
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run
(ThreadPool.java:688)
java.lang.Thread.run(Thread.java:534)
Bon, voila ce dont je dispose, à force de fouiner pour trouver un exemple
sur le web. Je teste le tout sur TomCat avec un JSDK 1.4.2.
Si vous pouvez m'aider ça serait sympa sinon dans 10 ans j'y suis encore!
Merci
1) D'abord l'arbo :
-
faces faces-config.xml WEB-INF
./faces:
adder.jsp
./WEB-INF:
classes html_basic.tld jsf_core.tld lib web.xml
./WEB-INF/classes:
jsfApp
./WEB-INF/classes/jsfApp:
MyActionListener.class NumberBean.class
./WEB-INF/lib:
commons-beanutils.jar commons-digester.jar jsf-api.jar jstl.jar
web-facesconfig_1_0.dtd
commons-collections.jar commons-logging.jar jsf-impl.jar standard.jar
2) Le fichier web.xml
-
<?xml version="1.0"?>
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<listener>
<listener-class>
jsfApp.MyActionListener
</listener-class>
</listener>
<!-- Faces Servlet -->
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup> 1 </load-on-startup>
</servlet>
<!-- Faces Servlet Mapping -->
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
</web-app>
3) Le fichier faces-config.xml
-
<?xml version="1.0"? >
<!DOCTYPE faces-config PUBLIC
"-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"
"http://java.sun.com/dtd/web-facesco...">
<faces-config>
<managed-bean>
<managed-bean-name>numberBean</managed-bean-name>
<managed-bean-class>NumberBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
</faces-config>
4) Et enfin, le fichier .jsp
-
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<html>
<head>
<title>Add 2 numbers</title>
</head>
<body>
<jsp:useBean id="NumberBean" class="jsfApp.NumberBean" scope="session" />
<f:view>
<h:form id="addForm" >
<br>First Number:
<h:inputText id="firstNumber" value="NumberBean.firstNumber"/>
<br>Second Number:
<h:inputText id="secondNumber" value="NumberBean.secondNumber"/>
<br>Result:
<h:outputText id="output" value="NumberBean.result"/>
<br>
<h:commandButton id="submitButton" title="Add" value="submit" >
<f:actionListener type="jsfApp.MyActionListener" />
</h:commandButton>
</h:form>
</f:view>
</body>
</html>
perds !!
Je n'obtiens que des erreurs de runtime, la dernière en date étant :
java.lang.NullPointerException
javax.faces.webapp.FacesServlet.init(FacesServlet.java:144)
org.apache.catalina.valves.ErrorReportValve.invoke
(ErrorReportValve.java:164)
org.apache.coyote.tomcat5.CoyoteAdapter.service
(CoyoteAdapter.java:206)
org.apache.coyote.http11.Http11Processor.process
(Http11Processor.java:833)
org.apache.coyote.http11.Http11Protocol
$Http11ConnectionHandler.processConnection(Http11Protocol.java:732)
org.apache.tomcat.util.net.TcpWorkerThread.runIt
(PoolTcpEndpoint.java:619)
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run
(ThreadPool.java:688)
java.lang.Thread.run(Thread.java:534)
Bon, voila ce dont je dispose, à force de fouiner pour trouver un exemple
sur le web. Je teste le tout sur TomCat avec un JSDK 1.4.2.
Si vous pouvez m'aider ça serait sympa sinon dans 10 ans j'y suis encore!
Merci
1) D'abord l'arbo :
-
faces faces-config.xml WEB-INF
./faces:
adder.jsp
./WEB-INF:
classes html_basic.tld jsf_core.tld lib web.xml
./WEB-INF/classes:
jsfApp
./WEB-INF/classes/jsfApp:
MyActionListener.class NumberBean.class
./WEB-INF/lib:
commons-beanutils.jar commons-digester.jar jsf-api.jar jstl.jar
web-facesconfig_1_0.dtd
commons-collections.jar commons-logging.jar jsf-impl.jar standard.jar
2) Le fichier web.xml
-
<?xml version="1.0"?>
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<listener>
<listener-class>
jsfApp.MyActionListener
</listener-class>
</listener>
<!-- Faces Servlet -->
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup> 1 </load-on-startup>
</servlet>
<!-- Faces Servlet Mapping -->
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
</web-app>
3) Le fichier faces-config.xml
-
<?xml version="1.0"? >
<!DOCTYPE faces-config PUBLIC
"-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"
"http://java.sun.com/dtd/web-facesco...">
<faces-config>
<managed-bean>
<managed-bean-name>numberBean</managed-bean-name>
<managed-bean-class>NumberBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
</faces-config>
4) Et enfin, le fichier .jsp
-
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<html>
<head>
<title>Add 2 numbers</title>
</head>
<body>
<jsp:useBean id="NumberBean" class="jsfApp.NumberBean" scope="session" />
<f:view>
<h:form id="addForm" >
<br>First Number:
<h:inputText id="firstNumber" value="NumberBean.firstNumber"/>
<br>Second Number:
<h:inputText id="secondNumber" value="NumberBean.secondNumber"/>
<br>Result:
<h:outputText id="output" value="NumberBean.result"/>
<br>
<h:commandButton id="submitButton" title="Add" value="submit" >
<f:actionListener type="jsfApp.MyActionListener" />
</h:commandButton>
</h:form>
</f:view>
</body>
</html>

Poser une question


Bonjour,
bizarre, je n'ai pas le problème, ni avec Tomcat 4, ni avec Tomcat 5.
Tu peux essayer d'ajouter
<listener>
<listener-class>
com.sun.faces.config.ConfigureListener
</listener-class>
</listener>
dans le web.xml, apparemment tu n'es pas le seul à rencontrer cette
exception.
Sinon, pour ton exemple, je ne vois pas bien pourquoi tu déclares un
MyActionListener dans le web.xml.
Il suffirait d'utiliser
<h:commandButton id="submitButton" title="Add" value="submit"
actionListener="#{MyActionListener.maMethode}" />
ou MyActionListener serait un managed bean déclaré dans faces-config.xml
Encore autre chose, le jsp:useBean ne sert à rien dans ta page, je
dirais que ce n'est pas la façon de faire en JSF.
Comme "numberBean" est un managed bean, tu peux y accéder avec le
langage d'expression JSF
Tu devrais aussi inclure tout le code HTML dans des
<f:verbatim></f:verbatim>, sinon ça peut causer des problèmes, notamment
si tu utilises des <jsp:include>, ce qui est bien pratique pour avoir un
système de templates.
Je te conseille de télécharger les examples JSF de chez Sun, tu verras
un peu comment ils font les choses.
Sinon, une très bonne source d'informations, le forum Sun sur JSF:
http://forum.java.sun.com/forum.jsp?forumB7
Bon courage, c'est passionnant d'être à la pointe de la technologie ;-)
Frédéric
Oui mais là ça d'vient frustrant ;-)
Merci pour tes explications... J'ai modifié en conséquence et mais ça ne
fonctionne toujours pas...
Si je mets
<listener>
</listener>
dans web.xml, en début de bloc <web-app>, et que j'invoque la page
/faces/adder.jsp j'obtiens une erreur 404 :
message /adder.jsp
description The requested resource (/adder.jsp) is not available.
Et si j'enlève le bloc <listener> j'obtiens l'exception du message
précédent...
Essaie de mettre ta jsp à la racine de la webapp plutôt que dans un
répertoire /faces
à la lecture de la doc ce que faisit un élément m'en dire un peu plus ?
en clair, le html restant dans les pages (en général de la présentation,
des tables) doit être inclus dans des tags