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 :

Aide fileupload javanullpointerException


Sujet :

JSF Java

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2011
    Messages : 790
    Points : 443
    Points
    443
    Par défaut Aide fileupload javanullpointerException
    Bonsoir,

    J'essaye de tester le composant fileupload du primefaces

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    											<p:fileUpload value="#{candidatCtr.file}" mode="simple"/>
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    //Mise à jour photo de profil
    	public void insertionPhoto() throws IOException {
    System.out.println(file.getFileName());
     
    			candidat.setPhoto(file.getFileName());
    			candidatBuss.modifierCandidat(candidat);
    Mais le problème j'ai un javanullpointerexcpetion sur la zone d'affichage et candidat.setPhoto et je sais pas pourquoi.

    Est-ce-que vous pouvez m'aider s'il vous plait?

    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	 private UploadedFile file;
     
    avec getter et setter

  2. #2
    Traductrice
    Avatar de Mishulyna
    Femme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2008
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 504
    Points : 7 840
    Points
    7 840
    Par défaut
    Bonjour,

    Ce ne serait pas une chaîne de caractères que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(file.getFileName());
    t'affiche?

    Essaie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    candidat.setPhoto(new File(file.getFileName()));
    Chaque fois que tu dis "je ne peux pas", n'oublie pas d'ajouter le mot "encore".

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2011
    Messages : 790
    Points : 443
    Points
    443
    Par défaut
    Au fait dans candidat.setphoto je dois mettre le nom du fichier seulement donc j'ai besoin d'une chaîne de caractère

  4. #4
    Traductrice
    Avatar de Mishulyna
    Femme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2008
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 504
    Points : 7 840
    Points
    7 840
    Par défaut
    Comment as-tu créé "file"? As-tu bien copié dedans les bytes de "uploadedFile"?
    Chaque fois que tu dis "je ne peux pas", n'oublie pas d'ajouter le mot "encore".

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2011
    Messages : 790
    Points : 443
    Points
    443
    Par défaut
    Citation Envoyé par Mishulyna Voir le message
    Comment as-tu créé "file"? As-tu bien copié dedans les bytes de "uploadedFile"?

    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
     
    	public void insertionPhoto(FileUploadEvent event) throws IOException {
     
    		try {
    			String path =  FacesContext.getCurrentInstance().getExternalContext().getResource("/Path.xml").toString();
     
     
    			file = event.getFile();
     
    			candidat.setPhoto(file.getFileName());
    			candidatBuss.modifierCandidat(candidat);
    			System.out.println(candidat.getPhoto());
    			builder = factory.newDocumentBuilder();
     
    		    Document xml = builder.parse(path);   
    		    XPathFactory xPathFactory = XPathFactory.newInstance();
    		    XPath xPath = xPathFactory.newXPath();
    		    XPathExpression expr = xPath.compile("//PhotoProfil");
    		    destinationPhoto = (String) expr.evaluate(xml, XPathConstants.STRING);
    		    System.out.println(destinationPhoto);
     
     
    		    copyFile(candidat.getPhoto(), file.getInputstream(),destinationPhoto);
     
     
    		} catch (DataAccessException e) {
    			e.printStackTrace();
    		} catch (XPathExpressionException e) {
    			e.printStackTrace();
    		} catch (SAXException e) {
    			e.printStackTrace();
    		} catch (ParserConfigurationException e) {
    			e.printStackTrace();
    		}
    	}
    sinon j'ai fait UploadedFile file; avec getter et setter

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2011
    Messages : 790
    Points : 443
    Points
    443
    Par défaut
    et dans la méthode copyfile j'ai ça
    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
    //Méthode générique de dépalement des fichiers CV et Lettre de motivation
    	 public void copyFile(String fileName, InputStream in,String fileDestination) throws FileNotFoundException {
    	        try {
    	            // write the inputStream to a FileOutputStream
    	            OutputStream out = new FileOutputStream(new File(fileDestination + fileName));
    	            int read = 0;
    	            byte[] bytes = new byte[1024];
    	            while ((read = in.read(bytes)) != -1) {
    	                out.write(bytes, 0, read);
    	            }
    	            in.close();
    	            out.flush();
    	            out.close();
    	            System.out.println("New file created!");
    	        }catch (IOException e) {
    	            System.out.println(e.getMessage());
    	        }
    	    }

  7. #7
    Traductrice
    Avatar de Mishulyna
    Femme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2008
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 504
    Points : 7 840
    Points
    7 840
    Par défaut
    Je dirais qu'il faudrait appeler copyFile avant, copier le continu de event.getFile() dans un autre fichier et attribuer celui-ci au candidat par l'instruction candidat.setPhoto(file.getFileName());
    FileUpload - Simple est "disabled" sur le site de PrimeFaces, où peut-on le tester?
    Chaque fois que tu dis "je ne peux pas", n'oublie pas d'ajouter le mot "encore".

  8. #8
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2011
    Messages : 790
    Points : 443
    Points
    443
    Par défaut
    euh faut la tester dans votre code malheureusement

  9. #9
    Traductrice
    Avatar de Mishulyna
    Femme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2008
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 504
    Points : 7 840
    Points
    7 840
    Par défaut
    Bonjour,
    Citation Envoyé par ahmedpa Voir le message
    Au fait dans candidat.setphoto je dois mettre le nom du fichier seulement donc j'ai besoin d'une chaîne de caractère
    En fait c'est faux. Tu dois y mettre soit un fichier (BLOB) soit un chemin de fichier, qui est toujours une chaîne de caractères mais qui indique où se trouve la photo à afficher.

    Essaie de tester avec cette méthode
    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
    public void handleFileUpload(FileUploadEvent event) {
            InputStream is;
            String fileName = event.getFile().getFileName();
            //String relativeDestination = "//images//";
            String absoluteDestination = "C:\\testUpload\\destination\\"; // à remplacer par la destination où tu charges les photos de l'application
            try {
                File tempFile = new File(absoluteDestination + fileName);
                //File tempFile = new File(FacesContext.getCurrentInstance().getExternalContext().getRealPath(relativeDestination + fileName));
                is = event.getFile().getInputstream();
                OutputStream os = new FileOutputStream(tempFile);
     
                byte buf[] = new byte[1024];
                int len;
                while ((len = is.read(buf)) > 0) {
                    os.write(buf, 0, len);
                }
                os.close();
                is.close();
     
                System.out.println("fileName" + fileName);//test
                System.out.println("file" + tempFile.getAbsolutePath());//test
     
            } catch (IOException ex) {
                ex.printStackTrace();
            }
            FacesMessage msg = new FacesMessage("Succesful", event.getFile().getFileName() + " is uploaded.");
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    méthode que tu appelleras dans ton composant PrimeFaces comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    actionListener="#{fileUploadController.handleFileUpload}"
    et vérifie ce qu'on t'affiche en console pour ces deux test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    System.out.println("fileName" + fileName);//test
    System.out.println("file" + tempFile.getAbsolutePath());//test
    Si tu utilises un chemin relatif (ce qui est fort déconseillé) tu peux dé-commenter les lignes de code en rapport avec ce chemin et mettre en commentaire ce qui se réfère au chemin absolu.
    Chaque fois que tu dis "je ne peux pas", n'oublie pas d'ajouter le mot "encore".

  10. #10
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2011
    Messages : 790
    Points : 443
    Points
    443
    Par défaut
    j'ai fait ceci mais ça marche pas:

    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
    	<p:fileUpload value="#{candidatCtr.file}" mode="simple"/>  
     
     
     
    													<br></br>
    													<br />
    													<br />
     
     
    												</h:panelGrid>
     
    												<p:commandButton value="#{change.Sauvegarder}"
     
     
    													actionListener="#{candidatCtr.insertionPhoto2}" />

    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
    public void insertionPhoto2(FileUploadEvent eventt) {
     
    		   InputStream is;
    	        String fileName = eventt.getFile().getFileName();
    	        //String relativeDestination = "//images//";
    	        try {
     
    				String path =  FacesContext.getCurrentInstance().getExternalContext().getResource("/Path.xml").toString();
    				 Document xml = builder.parse(path);   
    				    XPathFactory xPathFactory = XPathFactory.newInstance();
    				    XPath xPath = xPathFactory.newXPath();
    				    XPathExpression expr = xPath.compile("//PhotoProfil");
    				    destinationPhoto = (String) expr.evaluate(xml, XPathConstants.STRING);
    				    System.out.println(destinationPhoto);
     
    	            File tempFile = new File(destinationPhoto + fileName);
    	            //File tempFile = new File(FacesContext.getCurrentInstance().getExternalContext().getRealPath(relativeDestination + fileName));
    	            is = eventt.getFile().getInputstream();
    	            OutputStream os = new FileOutputStream(tempFile);
     
    	            byte buf[] = new byte[1024];
    	            int len;
    	            while ((len = is.read(buf)) > 0) {
    	                os.write(buf, 0, len);
    	            }
    	            os.close();
    	            is.close();
     
    	            System.out.println("fileName" + fileName);//test
    	            System.out.println("file" + tempFile.getAbsolutePath());//test
     
    	        } catch (IOException ex) {
    	            ex.printStackTrace();
    	        } catch (SAXException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			} catch (XPathExpressionException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    	        FacesMessage msg = new FacesMessage("Succesful", eventt.getFile().getFileName() + " is uploaded.");
    	        FacesContext.getCurrentInstance().addMessage(null, msg);
    	}

    Method not found:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    com.controller.CandidatCtr@9d9370.insertionPhoto2()
    alors que la méthode existe

  11. #11
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2011
    Messages : 790
    Points : 443
    Points
    443
    Par défaut
    en plus j'ai testé le même exemple dans le site du primefaces comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public void fileUpload() {  
     
    	        FacesMessage msg = new FacesMessage("Success! "+ file.getFileName() + " is uploaded.");  
    			FacesContext.getCurrentInstance().addMessage(null, msg);
     
     
    	}
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <p:fileUpload value="#{candidatCtr.file}" mode="simple"/>  
     
     
     
    													<br></br>
    													<br />
    													<br />
     
     
    												</h:panelGrid>
     
    												<p:commandButton value="#{change.Sauvegarder}"
    													ajax="false"
    													actionListener="#{candidatCtr.fileUpload}" />
    j'obtiens un nullpointerException sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	        FacesMessage msg = new FacesMessage("Success! "+ file.getFileName() + " is uploaded.");

  12. #12
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2011
    Messages : 790
    Points : 443
    Points
    443
    Par défaut
    Je suis arrivé à faire fonctionner le truc au fait il manquait le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    enctype="multipart/form-data"
    dans le h:form sinon tout ça fonctionne.

    Par ailleurs ,je n'arrive pas à changer le label du fileUpload en mode=simple.

    Est-ce-que il y a une cause avec le navigateur internet?

    Merci

  13. #13
    Traductrice
    Avatar de Mishulyna
    Femme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2008
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 504
    Points : 7 840
    Points
    7 840
    Par défaut
    Citation Envoyé par ahmedpa Voir le message
    au fait il manquait le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    enctype="multipart/form-data"
    dans le h:form sinon tout ça fonctionne.
    Ca alors...

    Citation Envoyé par ahmedpa Voir le message
    Par ailleurs ,je n'arrive pas à changer le label du fileUpload en mode=simple.
    Quel label? Tu n'as pas vu l'enctype mais tu vois un label dans l'exemple ou dans la Documentation Primefaces?
    A part de rechercher le composant dans le .jar de ta version et d'essayer d'"Override" le style CSS, je ne vois pas ce que tu pourrais faire d'autre...

    Citation Envoyé par ahmedpa Voir le message
    Est-ce-que il y a une cause avec le navigateur internet?
    Je dirais qu'il y a des Bundle.properties quelque part qui gèrent la locale car chez moi c'est marqué "Parcourir" sur le bouton à côté, tandis que tout le reste est en anglais.
    Chaque fois que tu dis "je ne peux pas", n'oublie pas d'ajouter le mot "encore".

  14. #14
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2011
    Messages : 790
    Points : 443
    Points
    443
    Par défaut
    oui voilà vous avez parcourir car vous utiliser google chrome je pense.si vous exécuter en internet explorer vous aurez le mot browser

  15. #15
    Traductrice
    Avatar de Mishulyna
    Femme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2008
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 504
    Points : 7 840
    Points
    7 840
    Par défaut
    Citation Envoyé par ahmedpa Voir le message
    oui voilà vous avez parcourir car vous utiliser google chrome je pense.
    Ben, non, justement. J'utilise IE 11, Chrome est banni de mes PC.
    Chaque fois que tu dis "je ne peux pas", n'oublie pas d'ajouter le mot "encore".

  16. #16
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2011
    Messages : 790
    Points : 443
    Points
    443
    Par défaut
    Bizarre en tout cas c'est que j'ai trouvé sur internet c'est que le label de ce button dépend du navigateur

  17. #17
    Traductrice
    Avatar de Mishulyna
    Femme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2008
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 504
    Points : 7 840
    Points
    7 840
    Par défaut
    Le mieux c'est de se renseigner "à la source" (voir la réponse de optimus.prime et suivre le lien indiqué ici), si tu as la volonté et le temps de creuser plus loin...
    Chaque fois que tu dis "je ne peux pas", n'oublie pas d'ajouter le mot "encore".

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

Discussions similaires

  1. Aide JavaNullPointerException avec pieChart
    Par ahmedpa dans le forum JSF
    Réponses: 4
    Dernier message: 04/03/2014, 20h27
  2. FileUpload & Bulbe d'aide
    Par SOPSOU dans le forum ASP.NET
    Réponses: 5
    Dernier message: 21/12/2011, 10h31
  3. Besoin d'aide pour l'I.A. d'un puissance 4
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 17h05
  4. Une petite aide pour les API ?
    Par Yop dans le forum Windows
    Réponses: 2
    Dernier message: 04/04/2002, 21h45

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