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 :

Richfaces rich:FileUpload : NullPointerException


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Nounoursonne
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 264
    Par défaut Richfaces rich:FileUpload : NullPointerException
    Bonjour,

    J'ai un soucis avec le composant rich:fileupload.

    Voici le code dans la page JSF
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <rich:fileUpload fileUploadListener="#{fileUploadBean.listener}"
                    maxFilesQuantity="#{fileUploadBean.uploadsAvailable}"
                    id="upload"
                    immediateUpload="#{fileUploadBean.autoUpload}"
                    acceptedTypes="jpg, gif, png, bmp" allowFlash="#{fileUploadBean.useFlash}">
     
                </rich:fileUpload>
    :

    la classe FileUploadBean :
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    public class FileUploadBean{
    	private static Logger logger = Logger.getLogger(FileUploadBean.class);
     
        private ArrayList<File> files = new ArrayList<File>();
        private int uploadsAvailable = 5;
        private boolean autoUpload = true;
        private boolean useFlash = false;
        public int getSize() {
            if (getFiles().size()>0){
                return getFiles().size();
            }else 
            {
                return 0;
            }
        }
     
        public FileUploadBean() {
        }
     
        public void listener(UploadEvent event) throws Exception{
        	  if (event == null) {
        		    logger.warn("Invalid upload event");
        		  } else {
        		    // on recupere l'item envoye
        		    UploadItem uploadItem = event.getUploadItem(); 
        		    if (uploadItem.getFile().isFile()) { // si c'est bien un fichier
        		      String repo = "C:"; 
        		      // a vous d'adapter a votre 
        		      //code ici on recupere le path vers le repertoire ou stocker le fichier
        		      File fileToWrite = new File(repo + File.separator +  uploadItem.getFileName()); 
        		      // on construit un Fichier avec le path/nomdufichierrecu
        		      File uploadedFile = uploadItem.getFile();
        		      FileChannel in = null; // on va utiliser deux files channel pour faire la recopie
        		      FileChannel out = null;
        		      try {
        		        in = new FileInputStream(uploadedFile).getChannel();
        		        out = new FileOutputStream(fileToWrite).getChannel();
        		        in.transferTo(0, in.size(), out); 
        		       // on recopie le fichier en entree dans le repertoire voulu
        		        //availableFileList.add(new FileUpload(fileToWrite.getName(), false));
        		       // ici FileUpload est une classe interne
        		       // au projet contenant simplement les donnees propres au fichier 
        		        //mais on porurait ajouter le nom simplement a 
        		        //une liste de String
        		        //logger.debug("ADDED : #0", availableFileList.get(availableFileList.size() - 1).getFileName());
        		        //logger.debug("fileUploadListener : LIST SIZE #0", availableFileList.size());
        		      } catch (IOException ex1) { 
        		        // recuperations des exceptions possibles
        		        logger.error("Error while copying the file.");
        		      } finally { // fermeture des filechannel
        		         if (in != null) {
        		           try {
        		             in.close(); 
        		           } catch (IOException ex2) {
        		             logger.error("Can't close input file channel");
        		           }
        		         if (out != null) {
        		           try {
        		             out.close();
        		           } catch (IOException ex3) {
        		              logger.error("Can't close ouput file channel");
        		           }
        		         }
        		       }
        		     }
        		   }
        		 }
        } 
    }
    L'erreur se produit sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (uploadItem.getFile().isFile())
    Y aurait-il une âme charitable qui puisse m'aider à résoudre mon soucis ?

    Merci

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    la méthode getFile peut être utiliser que dans le cas ou isTempFile() retourne true. Donc, lorsque le paramètre createTempFiles est défini à true dans la déclaration du filtre dans le web.xml.
    Tu peux soit modifier ce paramètre ou utiliser plutôt getData() pour avoir le flux de bytes du fichier et construire avec l'objet File.

  3. #3
    Membre éclairé Avatar de Nounoursonne
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 264
    Par défaut
    quelque chose dans ce genre ?
    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
     
        public void listener(UploadEvent event) throws Exception{
        	if (event == null) {
    		    logger.warn("Invalid upload event");
    		  } else {
    		    // on recupere l'item envoye
    		    UploadItem uploadItem = event.getUploadItem(); 
    		    String repo = "C:"; 
    		    File fileToWrite = new File(repo + File.separator +  uploadItem.getFileName()); 
     
    		    FileOutputStream out = new FileOutputStream(fileToWrite);
    		    out.write(uploadItem.getData());
    		    out.close();
    		 }
     
        }
    Là j'ai toujours un nullPointerException sur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     out.write(uploadItem.getData());

  4. #4
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    c'est uploadItem qui est null??

  5. #5
    Membre éclairé Avatar de Nounoursonne
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 264
    Par défaut
    arg, j'avais oublié dans le web.xml de mettre le parametre createTempFiles à false.

    La deuxieme solution marche nickel.

    Mais sinon l'upload item n'etait pas null, juste le getData().

    Merci beaucoup

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 06/02/2013, 11h18
  2. [RichFaces] <rich:fileUpload> et javascript
    Par len1sensibl dans le forum JSF
    Réponses: 10
    Dernier message: 15/02/2010, 10h32
  3. Réponses: 1
    Dernier message: 03/09/2009, 10h37
  4. Réponses: 5
    Dernier message: 05/08/2009, 16h48
  5. [Richfaces] utilisation de <rich:FileUpload >
    Par sendoshi dans le forum JSF
    Réponses: 12
    Dernier message: 18/12/2008, 18h49

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