IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JSF Java Discussion :

Appli JSF : Erreur "Cannot find FacesContext" [FAQ]


Sujet :

JSF Java

  1. #1
    Membre habitué
    Inscrit en
    Septembre 2006
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 254
    Points : 138
    Points
    138
    Par défaut Appli JSF : Erreur "Cannot find FacesContext"
    Bonjour,

    Je ne suis pas (pas encore ! ) un spécialiste d'Eclipse Europa et j'essaie de suivre le tuto de l'aide pour une première application JSF.
    J'ai bien défini les deux librairies (SUN-RI et JSTL) comme implémentation JSF.
    J'ai créé ma première page quasi vierge (login.jsp) et j'ai mis celle-ci comme page par défaut (welcome-file) dans Web.xml.
    Je lance mon serveur Tomcat 6 et j'appelle ma page par l'intermédiaire du contexte /JSFTutorial. Jusque là, tout va bien.

    Je mets un composant (un simple Command Button, mais qui est automatiquement wrappé par les tags <f:view> et <h:form>), et là, dès que j'essaie de voir le résultat en appelant le contexte, j'ai l'erreur dans la console "Cannot find FacesContext", et pareil dans le navigateur.
    J'ai la vague idée qu'il faudrait que je rajoute des fichiers *.tld quelque part, mais je ne sais pas où, et je ne sais pas lesquels et je ne sais pas comment, et je ne suis même pas sûr que ce soit ca ! (Comment ca : "je devrais abandonner l'informatique !")

    Si quelqu'un pouvait m'expliquer ou me donner une piste, ce serait sympa.

    D'avance merci

    Kim

  2. #2
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 335
    Points : 332
    Points
    332
    Par défaut
    tu utilise quoi comme url pour se connecter a l'application??

  3. #3
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Bonjour.
    Apparamment tu as mis les composants JSF dans la page login.jsp. Si c'est le cas, il ne faut surtout pas faire ça: tu dois pluôt les mettre dans une autre page et faire un forward dans la première.

    En résumé, tu peux faire ceci:
    Créer une page index.jsp dans la quelle tu mets uniquement un forward dans le bosy:
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <body>
    	<jsp:forward page="login.jsf"></jsp:forward>
    </body>

    Ensuite, tu définis index.jsp comme welcome-file.
    Et tu mets dans login.jsp tes composants JSF.

    Là, ça devrait marcher.

    Bonne chance.

  4. #4
    Rédacteur
    Avatar de Hikage
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 177
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 177
    Points : 6 301
    Points
    6 301
    Par défaut
    Est-ce que tu accede bien au page via l'url *.jsf, ou faces/* ( selon comment est configuré ton web.xml, et en particulier la servlet JSF ) ?

    Il ne faut pas acceder à la page .jsp directement, sinon cela ne passe pas via JSF, et donc il est normal que tu n'ai pas de JSF Context

    edit:
    Grilled

  5. #5
    Membre habitué
    Inscrit en
    Septembre 2006
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 254
    Points : 138
    Points
    138
    Par défaut Appli JSF : Erreur "Cannot find FacesContext"
    Depuis le navigateur interne d'Eclipse, j'appelle l'URL :
    http://localhost:8080/JSFTutorial

    où JSFTutorial est le contexte de mon projet

    Merci de ton intérêt

    Kim

  6. #6
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 335
    Points : 332
    Points
    332
    Par défaut
    essaie avec http://localhost:8080/JSFTutorial/faces/login.jsp
    si t'as utiliser <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
    </servlet-mapping>

    ou http://localhost:8080/JSFTutorial/login.jsf
    si t'as utiliser <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/*.jsf</url-pattern>
    </servlet-mapping>


    et je te conseille vivement de lire un document qui explique comment fonctionne jsf

  7. #7
    Membre habitué
    Inscrit en
    Septembre 2006
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 254
    Points : 138
    Points
    138
    Par défaut Appli JSF : Erreur "Cannot find FacesContext"
    Merci à vous dj.mos et Hikage, mais ca ne marche toujours pas :
    Lorsque j'utilise la solution de dj.mos, si je met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <jsp:forward page="login.jsf"></jsp:forward>
    Il me dit qu'il ne trouve pas la resource login.jsf (normal, y'a pas de fichier de ce nom)
    Si j'écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <jsp:forward page="login.jsp"></jsp:forward>
    même erreur "Cannot find FacesContext"
    Si je transforme ma page login.jsp en login.jsf, j'affiche le code de celle-ci.

    Je ne comprend pas très bien la remarque de Hikage. Je ne vois pas comment accéder autrement que par le context. En tout état de cause, voici mon fichier web.xml,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    <?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>JSFTutorial</display-name>
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
      <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
         <url-pattern>/faces/*</url-pattern>  
      </servlet-mapping>
    </web-app>
    Alors, si vous avez encore un peu de patience, merci d'avance

    Kim

  8. #8
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Voilà, dans index.jsp tu mets:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <jsp:forward page="faces/login.jsp"></jsp:forward>
    Rq: je ne suis pas sur si c'est faces/... ou /faces/...

    je t'ai donné un exemple avec login.jsf car dans mon web.xml, je mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
         <url-pattern>*.jsf</url-pattern>  
      </servlet-mapping>
    au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
         <url-pattern>/faces/*</url-pattern>  
      </servlet-mapping>

  9. #9
    Membre habitué
    Inscrit en
    Septembre 2006
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 254
    Points : 138
    Points
    138
    Par défaut Appli JSF : Erreur "Cannot find FacesContext" Toujours pas
    Toujours la même erreur, même avec les solutions que vous m'avez indiquées

    seddik_saber me conseille de lire de la documentation sur JSF, mais j'en ai déjà "bouffé" des tonnes. Cependant, je suis toujours preneur d'un nouveau lien et si, par hasard, vous aviez un exemple téléchargeable (sous forme d'un projet Eclipse), ca m'arrangerait bigrement. Je suis pour la pédagogie de l'exemple

    D'avance merci

    Kim

  10. #10
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Bizarre
    T'as du faire une petite bevue dans le chemin ...
    Alors je te propose de nous montrer web.xml, index.jsp et login.jsp histoire de trouver où ça bloque, car je suis sûr de l'origine de ton problème: le fait de mettre des composants JSF dans la page d'acceuil, qui est une erreur. il est nécessaire que la première page soit en JSP pur, du moment que Tomcat y accède directement, sans passer par la Faces Servlet, d'où ton erreur.

    La solution est de créer une page d'acceuil qui ne fait qu'appeler une autre page JSF en passant par la Faces Servlet. Pour y arriver, il faut que l'url soit capté par le pattern défini dans web.xml (/faces/* dans ton cas, *.jsf ou *.faces dans d'autres cas, bref, ce que tu veux).
    Donc, dans la page transitoire, on fait le <jsp:forward> avec comme page le nom de la vrai page mais après avoir appliqué la dessus le pattern.
    login.jsp devient /faces/login.jsp, même si cette dernière n'existe pas, la Faces Servlet saura trouver la vrai page (login.jsp).
    Sinon, je te conseille d'utiliser la notation postfixé (*.jsf, *.faces, *.ceQueTuVeux) au lieu de la préfixé (faces/*), c'est beaucoup plus simple.

  11. #11
    Membre habitué
    Inscrit en
    Septembre 2006
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 254
    Points : 138
    Points
    138
    Par défaut Appli JSF : Erreur "Cannot find FacesContext"
    Ok dj.mos, voici les documents demandés.
    Avant que tu y jettes un oeil, je veux simplement te dire que j'apprécie énormément ton attitude et que je t'en remercie.
    fichier web.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    <?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>tutorialJSF</display-name>
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
      <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
      </servlet-mapping>
    </web-app>
    index.jsp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
    <jsp:forward page="login.jsp"></jsp:forward>
    </body>
    </html>
    login.jsp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    <%@taglib uri="http://java.sun.com/jsf/html" prefix="h"%><%@taglib
    	uri="http://java.sun.com/jsf/core" prefix="f"%><%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
    <f:view><h:form>
    		<h:commandButton></h:commandButton>
    	</h:form>
    </f:view></body>
    </html>
    J'ajoute juste que mes librairies JSF sont
    la SUN RI 1.2 : jsf-api.jar jsf-impl.jar
    la JSTL du projet jakarta jstl.jar et standard.jar

    Encore merci

  12. #12
    Rédacteur
    Avatar de Hikage
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 177
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 177
    Points : 6 301
    Points
    6 301
    Par défaut
    Change login.jsp par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
    <jsp:forward page="faces/login.jsp"></jsp:forward>
    </body>
    </html>

  13. #13
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Citation Envoyé par kimlee Voir le message
    Ok dj.mos, voici les documents demandés.
    Avant que tu y jettes un oeil, je veux simplement te dire que j'apprécie énormément ton attitude et que je t'en remercie.
    Je t'en pries ! Nous sommes là pour ça
    Au fait, je la tiens (l'erreur) !
    Dans ton index.jsp, tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <jsp:forward page="login.jsp"></jsp:forward>
    Or je t'ai clairement mentionné qu'il ne faut jamais appeler une page jsf par le nom réel de la page JSP (xxx.jsp) car de cette façon on passe pas par la Faces Servlet.
    Dans ton web.xml, tu a associé la Faces Servlet à /faces/*.
    pour appeler une page JSF nommée x.jsp, on utilise faces/x.jsp.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <jsp:forward page="faces/login.jsp"></jsp:forward>
    Bonne chance.

    [edit]
    Grillé ! C'est exactement ce que te montre Hikage !

  14. #14
    Membre habitué
    Inscrit en
    Septembre 2006
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 254
    Points : 138
    Points
    138
    Par défaut Appli JSF : plus d'erreur "Cannot find FacesContext !
    Doublement grillé, car avant que tu t'apercoives que Hikage m'avait donné la réponse, je l'avais testé et essayé ! Et ca marche !
    Mais, de toutes façons, quel que soit le premier, vous avez droit tous les deux à mes remerciements !!

    Kim

    PS : ceci dit, ca m'étonnerait que j'ai pas d'autres questions d'ici peu, vu que je développe un premier petit projet avec cette technologie

  15. #15
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 335
    Points : 332
    Points
    332
    Par défaut
    salut kimlee, un exemple ca t'aide a mettre en oeuvre JSF rapidement ,mais je te conseille un document ou en parle de theorie pour comprendre le fondement de JSF, ses phases , comment il fonctionne , meme ci ca serais du charabia au debut mais apres tu verrais l'utilite
    bonne continuation

    ps : juste pour te mettre en bain je te recommande ces document :
    http://www.ibm.com/developerworks/vi...=nonbelievers:
    que je trouve assez complet pour debuter avec JSF

Discussions similaires

  1. Erreur "java.lang.RuntimeException: Cannot find FacesContext"
    Par moha_alnif dans le forum Wildfly/JBoss
    Réponses: 9
    Dernier message: 06/12/2012, 22h40
  2. Réponses: 1
    Dernier message: 08/06/2009, 16h22
  3. Réponses: 0
    Dernier message: 20/04/2008, 20h17
  4. [JSF] mon premier JSF:Cannot find FacesContext
    Par anitshka dans le forum JSF
    Réponses: 15
    Dernier message: 24/08/2007, 18h19
  5. erreur:Cannot find FacesContext
    Par oasma dans le forum JSF
    Réponses: 3
    Dernier message: 15/05/2007, 13h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo