2009-09-29 12 views
4

Mise à jour: Le problème est devenu le composant Flash lui-même. Il ne compilait pas correctement les valeurs multiples de l'élément. J'ai informé les développeurs et ils ont mis en œuvre une solution de contournement. Commons FileUpload prend en charge plusieurs valeurs par réponse acceptée.Comment extraire plusieurs valeurs du champ select en utilisant Commons File Upload?

J'ai une forme, enctype = "multipart/form-data", avec un

<select name="XX" multiple="multiple"> 

et un composant de téléchargement Flash qui permet à l'utilisateur de sélectionner plusieurs fichiers. Lors de la manipulation du POST en utilisant Apache Commons FileUpload, je le perçois Sélectionner le champ via

item.isFormField() == true 

et continue à extraire les détails via

// Process a regular form field 
if (item.isFormField()) { 
    String name = item.getFieldName(); 
    String value = item.getString(); 
} 

Le problème que je vais avoir est que item.getString() renvoie uniquement la première valeur sélectionnée dans le champ select; peu importe combien d'articles je choisis, je reçois seulement le premier article.

De même, lorsque j'utilise la méthode de servlet standard pour l'extraction de paramètres, c.-à-d.

final String[] values = request.getParameterValues("XX"); 

valeurs sont vides, ce que je suppose est parce que la forme est multipart codée.

Comment puis-je récupérer ces multiples valeurs sélectionnées à partir de mon champ de sélection multiple?

Cette question (sans réponse) a également été posed on the Sun forums par un autre auteur.

+0

Quel composant de téléchargement flash utilisez-vous? Fondamentalement, j'ai la même exigence, mais pas en mesure d'obtenir le bon composant de téléchargement flash. – jay

+0

http://www.element-it.com/multipowupload.Je suis vraiment content de ça et le développeur a eu un très rapide délai entre le moment où j'ai signalé le bogue et la sortie d'une version corrigée pour moi. – rcampbell

Répondre

3

En fait, plusieurs éléments peuvent avoir le même fieldName, il vous suffit d'ajouter toutes les valeurs de chaîne d'élément pour le même fieldName à une collection de String, puis de convertir cette collection en tableau.

trouvé quelques informations là: http://www.nabble.com/RES:-File-Upload-td25910926.html

+0

Le lien ci-dessus ne fonctionne pas! : | – freesoul

3

lien ci-dessus ne fonctionne pas et si quelqu'un d'autre est confronté à même problème, voici comment récupérer toutes les valeurs -

Récupère plusieurs valeurs du champ de sélection à l'aide de fichiers Commons Upload -

List items = upload.parseRequest(request); 
    Iterator iter = items.iterator(); 

    while (iter.hasNext()) { 
     FileItem item = (FileItem) iter.next(); 

     if (item.isFormField()) { 
      String name = item.getFieldName(); 
      String value = item.getString(); 

     if (name.equals("multi-select")) 
      completeSet = value; 
    } 

alors completeSet aura juste la première valeur. toutes les autres valeurs de multi select sont également dans l'élément avec le même nom (ici multi-select). Donc tout ce que vous avez à faire est de chercher toutes les valeurs, un par un, puis le convertir en type de données nécessaires (à savoir: - que tout rassembler dans une liste et le convertir en String [] :)) EG-

List<String> completeSet=new ArrayList<String>(); 
if(name.equals("multi-select")) 
    completeSet.add(value); 

De cette façon, à la fin, completeSet aura tous les ensembles de valeurs.