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 :

Plusieurs upload dans une seule page jsp .


Sujet :

JSF Java

  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 233
    Par défaut Plusieurs upload dans une seule page jsp .
    Bonjour à tous,

    J'aimerais faire un upload de plusieurs pièces jointes, j’ai essayé avec une seule pièce jointe et ça marche .

    Maintenant quand il s’agit de plusieurs boutons upload et plusieurs boutons parcourir ça veut pas marcher, je n'utilise pas les richefaces mais seulement le tomahawk-1.1.8, car j'ai pas beaucoup de temps pour apprendre le truc des richesfaces et c'est un peut compliqué pour configurer son projet, d’autre part j'utilise jsf RI 1.1.0.1 .

    Finalement voila les fichiers de mon projet .

    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
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
      <context-param>
        <param-name>javax.faces.CONFIG_FILES</param-name>
        <param-value>/WEB-INF/faces-config.xml</param-value>
      </context-param>
      <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>*.jsf</url-pattern>
        </servlet-mapping>
     
    <filter>
        <filter-name>extensionsFilter</filter-name>
            <filter-class>org.apache.myfaces.webapp.filter.ExtensionsFilter</filter-class>
               <init-param>
            <description>
                Set the size limit for uploaded files.
                    Format: 10  - 10 bytes
                            10k - 10 KB
                            10m - 10 MB
                            1g  - 1 GB
            </description>
            <param-name>uploadMaxFileSize</param-name>
            <param-value>100m</param-value>
        </init-param>
        <init-param>
            <description>
                Set the threshold size - files below this limit are stored 
                in memory, files above this limit are stored on disk.
                    Format: 10  - 10 bytes
                            10k - 10 KB
                            10m - 10 MB
                            1g  - 1 GB
            </description>
            <param-name>uploadThresholdSize</param-name>
            <param-value>100k</param-value>
        </init-param>
        <init-param>
            <description>
                Set the path where the intermediary files will be stored.
            </description>
            <param-name>uploadRepositoryPath</param-name>
            <param-value>/temp</param-value>
        </init-param>
     
    </filter>
     
    <filter-mapping>
             <filter-name>extensionsFilter</filter-name>
             <url-pattern>*.jsf</url-pattern>
    </filter-mapping>
     
    <filter-mapping>
              <filter-name>extensionsFilter</filter-name>
              <url-pattern>/faces/*</url-pattern>
    </filter-mapping>
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
    </web-app>
    monbean :

    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
     
    public class MyBean {
     
        // Init ---------------------------------------------------------------------------------------
     
        private UploadedFile uploadedFile;
        private String fileName;
     
        // Actions ------------------------------------------------------------------------------------
     
        public void submit() {
     
            // Just to demonstrate what information you can get from the uploaded file.
            System.out.println("File type: " + uploadedFile.getContentType());
            System.out.println("File name: " + uploadedFile.getName());
            System.out.println("File size: " + uploadedFile.getSize() + " bytes");
     
            try {
                // Precreate an unique file and then write the InputStream of the uploaded file to it.
                String uploadedFileName = FileUtil.trimFilePath(uploadedFile.getName());
                File uniqueFile = FileUtil.uniqueFile(new File("c:/upload"),uploadedFileName);
                FileUtil.write(uniqueFile, uploadedFile.getInputStream());
                fileName = uniqueFile.getName();
     
                // Show succes message.
                FacesContext.getCurrentInstance().addMessage("uploadForm", new FacesMessage(
                    FacesMessage.SEVERITY_INFO, "File upload succeed!", null));
     
            } catch (IOException e) {
     
                // Show error message.
                FacesContext.getCurrentInstance().addMessage("uploadForm", new FacesMessage(
                    FacesMessage.SEVERITY_ERROR, "File upload failed with I/O error.", null));
     
                // Always log stacktraces.
                e.printStackTrace();
            }
        }
     
        // Getters ------------------------------------------------------------------------------------
     
        public UploadedFile getUploadedFile() {
            return uploadedFile;
        }
     
        public String getFileName() {
            return fileName;
        }
     
        // Setters ------------------------------------------------------------------------------------
     
        public void setUploadedFile(UploadedFile uploadedFile) {
            this.uploadedFile = uploadedFile;
        }
     
    }
    la page 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
    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
     
    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
    <%@ taglib uri="http://myfaces.apache.org/tomahawk" prefix="t" %>
     
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
     
    <f:view>
        <html xmlns="http://www.w3.org/1999/xhtml">
            <head>
                <title>File upload test</title>
            </head>
            <body>
     
                    <br />
     
    				<h:dataTable value="#{bean_acte.pjd_Acte}" var="PJD" border="1">
    					<h:column id="Code_Pjd"> <h:outputText value="#{PJD.id.pjd.codePjd}" />
    						<f:facet name="header">
    							<h:outputText value="Code" />
    						</f:facet>
    					</h:column>
    					<h:column id="Titre_Pjd"><h:outputText value="#{PJD.id.pjd.titrePjd}" />
    						<f:facet name="header">
    							<h:outputText value="Titre" />
    						</f:facet>
    					</h:column>
    					<h:column id="Parcourir"> 
    					  <h:form id="uploadForm" enctype="multipart/form-data">
    					<t:inputFileUpload id="file" value="#{bean_acte.uploadedFile}" required="true" />
    					<h:commandButton value="Submit" action="#{bean_acte.submit}" />
    					</h:form>
    						<f:facet name="header">
    						<h:outputText value="Joindre" />
    						</f:facet>
    					</h:column>
    				</h:dataTable>
     
     
     
                <h:outputLink value="file/#{bean_acte.fileName}" rendered="#{bean_acte.fileName != null}">
                    Download back
                </h:outputLink>
            </body>
        </html>
    </f:view>
    Et voila l'erreur que j'ai en retour lorsque je submit le upload :

    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
     
    javax.servlet.ServletException: #{bean_acte.submit}: javax.faces.el.EvaluationException: java.lang.NullPointerException
    	javax.faces.webapp.FacesServlet.service(FacesServlet.java:209)
    	org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:301)
     
    cause mère
     
    javax.faces.FacesException: #{bean_acte.submit}: javax.faces.el.EvaluationException: java.lang.NullPointerException
    	com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:78)
    	javax.faces.component.UICommand.broadcast(UICommand.java:312)
    	javax.faces.component.UIData.broadcast(UIData.java:657)
    	javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:267)
    	javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:381)
    	com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:75)
    	com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)
    	com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:90)
    	javax.faces.webapp.FacesServlet.service(FacesServlet.java:197)
    	org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:301)
     
    cause mère
     
    javax.faces.el.EvaluationException: java.lang.NullPointerException
    	com.sun.faces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:130)
    	com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:72)
    	javax.faces.component.UICommand.broadcast(UICommand.java:312)
    	javax.faces.component.UIData.broadcast(UIData.java:657)
    	javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:267)
    	javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:381)
    	com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:75)
    	com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)
    	com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:90)
    	javax.faces.webapp.FacesServlet.service(FacesServlet.java:197)
    	org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:301)
    Merci à vous.

  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
    Tu dois avoir l'objet null lors de l'appel de la méthode submit..
    l'upload fonctionne bien la première fois?

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 233
    Par défaut
    Citation Envoyé par Sniper37 Voir le message
    Tu dois avoir l'objet null lors de l'appel de la méthode submit..
    l'upload fonctionne bien la première fois?
    Merci pour votre réponse ,

    Oui lors d'un upload unitaire ça marche, mais quand j'ai affaire à plusieurs fichiers la j'ai cette erreur .
    Mais j'arrive pas à l'éviter pour l'instant .

    A votre avis quel est l'objet qui est considéré null lors de l'execution et comment le rendre non null ?

  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
    regarde en debug ce que ça donne, mais à ça doit être le uploadedFile..
    sinon si tu peux utiliser Richfaces, le composant upload permet de faire l'upload de plusieurs fichiers..

  5. #5
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 233
    Par défaut
    Oui je pense que le problème viens du type UploadedFile car c’est une interface et non une class .

    Le problème c’est comment je dois l’instancier ? Pour qu’a chaque submit j’aurai une nouvelle instance du Uploadedfile .

    Pour les Richefaces je préfère les éviter : j’ai du recommencer tout mon projet a cause d’une mauvaise configuration des api et jar .J’ai pas envie de recommencer à nouveau le projet.

    Merci .

  6. #6
    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
    Citation Envoyé par Viscapon Voir le message
    Oui je pense que le problème viens du type UploadedFile car c’est une interface et non une class .

    Le problème c’est comment je dois l’instancier ? Pour qu’a chaque submit j’aurai une nouvelle instance du Uploadedfile .

    Pour les Richefaces je préfère les éviter : j’ai du recommencer tout mon projet a cause d’une mauvaise configuration des api et jar .J’ai pas envie de recommencer à nouveau le projet.

    Merci .
    Tu ne peux pas instancier une interface, il faudrait utiliser une implémentation,

    La complexité de configuration de Richfaces n'est pas une contrainte, il faut d'abord se poser la question des besoins..

  7. #7
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 233
    Par défaut
    Enfin pour le besoin je veux uploader un nombre indeterminé de pieces jointes (jutilise une page dynamique) .

    Donc à partire d'une Liste de pieces jointes je peut uploader 2 ou 3 ou... pieces jointes.

    Et pour l'isntant ça bloque ,et avec les rcihesfaces je me suis engoufré avec tout la configuration requis(ajout de jar ,web.xml à configurer ...) bref c'est pas l'eau à boire quand on travail dans un delai limité .

  8. #8
    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
    à toi de voir, je ne trouve pas la config de Richfaces compliqué et si tu as un problème, tu peux poser la question sur le forum..
    Ceci dit, normalement tu dois pouvoir trouver une solution à ton problème sans passer par Richfaces.
    comment tu fais l'upload??
    tu peux le faire un par un..

  9. #9
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 233
    Par défaut
    comment tu fais l'upload??
    tu peux le faire un par un..
    Justement j'arrive pas à le faire un par un j'ai plusieurs bouton submit et d'autres bouton parcourir mais ça foire !

    Pour la façon d'uploader les fichiers de code dans mon premier poste le montrent ,c'est un exemple classique qui marche pour un seul upload ,mais pas pour plusieurs à priopri.

  10. #10
    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
    ton bean est dans quel scope?
    pourquoi tu met l'uplaod dans une dataTable..

  11. #11
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 233
    Par défaut
    Citation Envoyé par Sniper37 Voir le message
    ton bean est dans quel scope?
    pourquoi tu met l'uplaod dans une dataTable..
    Le scope session.
    Je met de datatable car j'ai une liste dynamique de pieces jointe ,comme je l'ai dit j'ai un nombre indeterminé de pièces jointe c'est pas fixe c'est dynamique ,d'ou le datatable .

  12. #12
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <h:column id="Parcourir"> 
    <h:form id="uploadForm" enctype="multipart/form-data">
    <t:inputFileUpload id="file" value="#{bean_acte.uploadedFile}" required="true" />
    <h:commandButton value="Submit" action="#{bean_acte.submit}" />
    </h:form>
    qu'est ce qui est dynamique dans le code?

  13. #13
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 233
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <h:dataTable value="#{bean_acte.pjd_Acte}" var="PJD" border="1">
    					<h:column id="Code_Pjd"> <h:outputText value="#{PJD.id.pjd.codePjd}" />
    Voila la liste dynamique (pjd_acte) declare dans mon bean et que j'alimente à partir de ma BD (via hibernate) c'est une liste dynamique et du coup le datatable sera dynamique .

    Je crois que finalement je devrai céder aux richfaces.Qulle version dois-je utiliser pour resoudre ce probleme sachant que j'utilise jsf 1.1 .

  14. #14
    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
    si tu utilise jsf 1.1 laisse tomber, l'upload file n'est pas compatible avec cette version, il était inclus dans une version de Richfaces qui fonctionne qu'avec JSF 1.2,

    la table est dynamique certes, mais la colonne ou tu fais l'upload, ne contient aucun élément de la ligne courante de la table, donc je ne vois pas dans quel partie tu fais la liaison entre le fichier uploader et la ligne courante de la dataTable..

  15. #15
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 233
    Par défaut
    la table est dynamique certes, mais la colonne ou tu fais l'upload, ne contient aucun élément de la ligne courante de la table, donc je ne vois pas dans quel partie tu fais la liaison entre le fichier uploader et la ligne courante de la dataTable..
    Comment je pourrais faire cette liaison dans mon code c'est la premiere fois que j'utilise une table dynamique .

    D'autre part je viens de créer un nouveau projet avec jsf 1.2 ou j'ai inclus richfaces 3.3.0 ,et donc si ça ne marche pas j'utiliserais les richefaces .
    D'ailleurs j'ai trouvé un exemple sur l'upload multiple accompagné d'une demo


    http://www.jboss.org/file-access/def...ileUpload.html
    Mais si vous avez un exemple plus complet (point de vu code source ) j'aimerais bien .

  16. #16
    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
    faut voir aussi le principe de ton application
    si pour chaque ligne, tu dois uploader un fichier..tu dois avoir dans le bean qui correspond à la ligne de la table, un attribut qui contient soit le nom du fichier soit le flux de byte..

    mais si tu as une centaines de lignes, je ne vois pas un utilisateur faire l'upload pour chaque ligne.
    c'est peu être la dataTable qui n'est pas à sa place ici..

  17. #17
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 233
    Par défaut
    Citation Envoyé par Sniper37 Voir le message
    faut voir aussi le principe de ton application
    si pour chaque ligne, tu dois uploader un fichier..tu dois avoir dans le bean qui correspond à la ligne de la table, un attribut qui contient soit le nom du fichier soit le flux de byte..

    mais si tu as une centaines de lignes, je ne vois pas un utilisateur faire l'upload pour chaque ligne.
    c'est peu être la dataTable qui n'est pas à sa place ici..
    Non c'est le premier cas : pour chaque ligne,je dois uploader un fichier .
    car chaque ligne correspond à une piece jointe et j'utilise une liste dynamique de pieces jointes(en fait une liste de string libelle de chaque PJ).

Discussions similaires

  1. [MySQL] plusieurs formulaire dans une seule page
    Par naim2009 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 26/03/2009, 20h54
  2. [MySQL] Insérer plusieurs formulaires dans une seule page
    Par hakou08 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 19/03/2009, 10h37
  3. afficher plusieurs composants dans une seule page
    Par groupe dans le forum GWT et Vaadin
    Réponses: 6
    Dernier message: 07/05/2008, 11h44
  4. Gérer plusieurs connexions dans une seule page Aspx
    Par Inspirate dans le forum Accès aux données
    Réponses: 6
    Dernier message: 12/07/2007, 15h06
  5. [MySQL] Connections à plusieurs serveurs dans une seule page php
    Par Pgs dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 02/06/2006, 16h59

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