OVH Cloud OVH Cloud

JSF : Je craque

5 réponses
Avatar
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-facesconfig_1_0.dtd">

<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>

5 réponses

Avatar
Frédéric Augé
Zouplaz wrote:
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



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
<h:outputText value="#{numberBean.firstNumber}" />

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

Avatar
Zouplaz
Frédéric Augé - :


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-class>com.sun.faces.config.ConfigureListener</listener-class>
</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...

Avatar
Frédéric Augé
Zouplaz wrote:

Frédéric Augé - :


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-class>com.sun.faces.config.ConfigureListener</listener-class>
</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...

Ben c'est mieux, le serveur démarre, simplement il ne trouve pas la page.

Essaie de mettre ta jsp à la racine de la webapp plutôt que dans un
répertoire /faces


Avatar
Pasturel
Frédéric Augé a écrit:
Zouplaz wrote:

[SNIP]
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.
Pardon de m'imiscer m'immiscer dans le thread. Mais je n'ai pas compris

à la lecture de la doc ce que faisit un élément <f:verbatim>. Qui peut
m'en dire un peu plus ?


Bon courage, c'est passionnant d'être à la pointe de la technologie ;-)
oui!

Frédéric



Avatar
Frédéric Augé
Pasturel wrote:

Frédéric Augé a écrit:

Zouplaz wrote:

[SNIP]


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.


Pardon de m'imiscer m'immiscer dans le thread. Mais je n'ai pas compris
à la lecture de la doc ce que faisit un élément <f:verbatim>. Qui peut
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 <f:verbatim>.