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 :

[JSF] probleme de java.io.FileNotFoundException sur une image


Sujet :

JSF Java

  1. #1
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    686
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 686
    Points : 118
    Points
    118
    Par défaut [JSF] probleme de java.io.FileNotFoundException sur une image
    salut,
    je suis en cours de developper une application web avec jsf
    pour integrer des graphiques, j'ai ajouter la bibliotheque jfreechart
    lorsque je construit un graph j'ai l'erreur suivante:
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    java.io.FileNotFoundException: ..\pages\piechart.png (Le chemin d'accès spécifié est introuvable)
    	at java.io.FileOutputStream.open(Native Method)
    	at java.io.FileOutputStream.<init>(FileOutputStream.java:179)
    	at java.io.FileOutputStream.<init>(FileOutputStream.java:131)
    	at org.jfree.chart.ChartUtilities.saveChartAsPNG(ChartUtilities.java:318)
    	at JfreeChart.generateChartMethod(JfreeChart.java:57)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:585)
    	at org.apache.el.parser.AstValue.invoke(AstValue.java:172)
    	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
    	at org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:68)
    	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
    	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
    	at javax.faces.component.UICommand.broadcast(UICommand.java:387)
    	at org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:321)
    	at org.ajax4jsf.component.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:296)
    	at org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:253)
    	at org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:466)
    	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
    	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
    	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    	at TimeoutFilter.doFilter(TimeoutFilter.java:60)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    	at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:177)
    	at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:267)
    	at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:380)
    	at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:507)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    	at org.jstripe.tomcat.probe.Tomcat55AgentValve.invoke(Tomcat55AgentValve.java:20)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
    	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    	at java.lang.Thread.run(Thread.java:595)
    voici mon code:
    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
    18
    19
    20
     
    public String generateChartMethod(){
    		 JFreeChart chart = ChartFactory.createTimeSeriesChart( 
    	                "Test",  	// title 
    	                "Date",		// x-axis label 
    	                "Nombre",   // y-axis label 
    	                getDataset(),	// data 
    	                true,       // create legend? 
    	                true,       // generate tooltips? 
    	                false       // generate URLs? 
    	        		); 
    		 try {
     
                  File file1 = new File("../pages/piechart.png");
                             ChartUtilities.saveChartAsPNG(file1, chart, 600, 400, null);
             } catch (Exception e) {
                  e.printStackTrace();
             }
             return "jfreechart";
    		}
    je n'ai pas un fichier nommé piechart.png mais je pnse que ca n'a rien à avoir car l'instruction new File permet ,si je me trompe pas,de creer un objet et non de chercher un fichier

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 351
    Points : 432
    Points
    432
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    File file = new File(MaClasse.class.getClassLoader.getResources("pages/piechart.png"));
    Et mettre le fichier piechart.png dans le package pages .

    Oups c'est pour écrire je dirais ceci alors :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    File file = new File(MaClasse.class.getClassLoader.getResources("pages/").toString, "piechart.png");

  3. #3
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    tu devrais éviter d'utiliser des File qui pointent vers des ressources de ta webapp. En effet, suivant le conteneur, rien ne te garanti que

    1) les fichiers seront inscriptibles et pas read-only
    2) qu'il existera des fichiers (les spécification J2EE n'obligent pas les conteneurs à exploser les .war, même si la pluspart le font par facilité)
    3) que le contneur, en voyant un fichier changé dans la webapp ne décidera pas qu'il est temps de recharger la webapp car elle a été altérée.

    En fait, pour créer des fichiers destinés à être servis aux utilisateurs, il faut normalement

    1) aménager un répetoire destiné à ça sur le serveur, répetoire en dehors de la webapp (afin que les fichiers ne soient pas supprimés à chaque mise à jour)
    2) configurer dans ta webapp quelque part (bean jsf, fichier properties, context-parameter dans le web.xml, entrée jndi, base de données, .... au choix) l'emplacement de ce dossier de travail
    3) stocker les fichiers que tu crée à cet endroit
    4) créer un servlet ou tout aute mécanisme pour servir ces fichiers.

  4. #4
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    686
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 686
    Points : 118
    Points
    118
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    tu devrais éviter d'utiliser des File qui pointent vers des ressources de ta webapp. En effet, suivant le conteneur, rien ne te garanti que

    1) les fichiers seront inscriptibles et pas read-only
    2) qu'il existera des fichiers (les spécification J2EE n'obligent pas les conteneurs à exploser les .war, même si la pluspart le font par facilité)
    3) que le contneur, en voyant un fichier changé dans la webapp ne décidera pas qu'il est temps de recharger la webapp car elle a été altérée.

    En fait, pour créer des fichiers destinés à être servis aux utilisateurs, il faut normalement

    1) aménager un répetoire destiné à ça sur le serveur, répetoire en dehors de la webapp (afin que les fichiers ne soient pas supprimés à chaque mise à jour)
    2) configurer dans ta webapp quelque part (bean jsf, fichier properties, context-parameter dans le web.xml, entrée jndi, base de données, .... au choix) l'emplacement de ce dossier de travail
    3) stocker les fichiers que tu crée à cet endroit
    4) créer un servlet ou tout aute mécanisme pour servir ces fichiers.
    mon fichier à creer n'est qu'un diagramme de statistiques;
    je n'ai pas donc besoin qu'il soit persistant,je veut seulement l'afficher dans une jsp.
    n'existe pas une moyen?

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Citation Envoyé par riadhhwajdii Voir le message
    mon fichier à creer n'est qu'un diagramme de statistiques;
    je n'ai pas donc besoin qu'il soit persistant,je veut seulement l'afficher dans une jsp.
    n'existe pas une moyen?
    Comme je viens de l'indiquer. Tu le crée quelque part, et tu le sert avec un servlet. Ou tu le génère dynamiquement depuis la servlet. Cette dernière version est de loin la préférable, car, que se passera-t-il si deux personnes demandent deux diagrammes différents en même temps et que tu utilise le même fichier pour les deux?

  6. #6
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    686
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 686
    Points : 118
    Points
    118
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Comme je viens de l'indiquer. Tu le crée quelque part, et tu le sert avec un servlet. Ou tu le génère dynamiquement depuis la servlet. Cette dernière version est de loin la préférable, car, que se passera-t-il si deux personnes demandent deux diagrammes différents en même temps et que tu utilise le même fichier pour les deux?
    merci tchize mais j'ai suivi ce lien:
    http://www.roseindia.net/chartgraphs...-jsppage.shtml
    dans cet example, il a crée un le fichier dans webapps
    pourquoi ca marchait pas pour moi alors

  7. #7
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    ca marche dans l'exemple, c'est juste pas très orthodoxe, comme pour beaucoup d'exemple puisque leur but est de montre à la va vite une fonctionnalité, pas de développer un logiciel propre à tous points de vue. Dans ton cas, pour commencer, tu ne crée pas du tous le fichier de la même manière. Le moyen le plus "propre" de trouver l'emplacement de ta webapp c'est de faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getServletContext().getRealPath("/")
    depuis une servlet ou la JSP. Mais t'as toujours le problème du fichier unique là ou tu devrais pouvoir gérer plusieurs requetes en parallèle, et t'as toujours aussi le problème d'écrire dans un webapp en fonctionnement ce qui n'est pas très propre (en même temps, on le fait tous quand on a pas envie de coder proprement :p)

    Edit: comme t'es en jsf, tu devrais pourvoir récupérer le servletContext à partir de l'externalcontext du facescontext.

  8. #8
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    686
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 686
    Points : 118
    Points
    118
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    ca marche dans l'exemple, c'est juste pas très orthodoxe, comme pour beaucoup d'exemple puisque leur but est de montre à la va vite une fonctionnalité, pas de développer un logiciel propre à tous points de vue. Dans ton cas, pour commencer, tu ne crée pas du tous le fichier de la même manière. Le moyen le plus "propre" de trouver l'emplacement de ta webapp c'est de faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getServletContext().getRealPath("/")
    depuis une servlet ou la JSP. Mais t'as toujours le problème du fichier unique là ou tu devrais pouvoir gérer plusieurs requetes en parallèle, et t'as toujours aussi le problème d'écrire dans un webapp en fonctionnement ce qui n'est pas très propre (en même temps, on le fait tous quand on a pas envie de coder proprement :p)

    Edit: comme t'es en jsf, tu devrais pourvoir récupérer le servletContext à partir de l'externalcontext du facescontext.
    merci infiniment tchize pour votre aide
    je pense que créer un dossier en serveur ,comme vous m'avez suggérer est la bonne solution
    je vait esssayer avec

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. java.io.FileNotFoundException sur une dépendance
    Par Paci88 dans le forum Maven
    Réponses: 1
    Dernier message: 02/01/2009, 17h50
  2. Probleme avec un header qui redirige sur une image
    Par Seb33300 dans le forum Langage
    Réponses: 3
    Dernier message: 30/06/2007, 20h24
  3. Problemes de bordures au clic sur une StringGrid
    Par jmulans dans le forum Delphi
    Réponses: 8
    Dernier message: 27/06/2007, 13h34
  4. problem de saisie d'attribut sur une jsp
    Par anouss dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 22/05/2007, 09h35
  5. Réponses: 12
    Dernier message: 15/12/2005, 14h32

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