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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    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
    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 505
    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 505
    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()));

  3. #3
    Membre éclairé
    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
    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 505
    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 505
    Par défaut
    Comment as-tu créé "file"? As-tu bien copié dedans les bytes de "uploadedFile"?

  5. #5
    Membre éclairé
    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
    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 éclairé
    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
    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 505
    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 505
    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.

  8. #8
    Membre éclairé
    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
    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

  9. #9
    Membre éclairé
    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
    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.");

+ 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